Làm thế nào để gắn một hình ảnh đĩa từ dòng lệnh?


39

Tôi biết cách gắn ổ đĩa có tệp thiết bị tương ứng trong / dev, nhưng tôi không biết cách thực hiện điều này đối với hình ảnh đĩa không đại diện cho thiết bị vật lý và không có tương tự trong / dev (ví dụ: Tập tin ISO hoặc hình ảnh đĩa mềm). Tôi biết tôi có thể làm điều này trong Mac OS X bằng cách nhấp đúp vào biểu tượng của hình ảnh đĩa trong Finder, nó sẽ tự động gắn ổ đĩa, nhưng tôi muốn có thể làm điều này từ thiết bị đầu cuối. Tôi không chắc chắn nếu có một cách chung cho Unix để làm điều này, hoặc nếu đây là nền tảng cụ thể.


1
Bạn có nghĩa là bạn muốn làm điều đó trên dòng lệnh trên OS X? Bạn đề cập đến nó, nhưng có thể tốt hơn để được rõ ràng nếu câu hỏi là cụ thể cho một os nhất định. Ngoài ra, bạn muốn nói đến loại hình ảnh đĩa nào? .iso?
ilkkachu

Câu trả lời:


42

Nếu đó là hình ảnh ổ cứng với bảng phân vùng MBR, tôi sẽ fdisk hình ảnh để tìm phần bù cho phân vùng tôi cần gắn.

fdisk -lu /path/disk.img

Sau đó, tôi sẽ gắn kết nó vượt qua bù.

mount -o loop,offset=xxxx /path/disk.img /mnt/disk.img.partition

Giá trị offset được tính bằng byte, trong khi fdiskhiển thị số khối, vì vậy bạn nên nhân giá trị từ cột "Bắt đầu" hoặc "Bắt đầu" của fdiskđầu ra với 512(hoặc bất kể kích thước khối là gì) để có được giá trị bù để gắn vào.


5
losetup -Pnói chung là thuận tiện hơn phương pháp này: unix.stackexchange.com/a/316407/32558
Ciro Santilli 改造

35

Trên hầu hết hệ thống GNU hiện đại, mountlệnh có thể xử lý:

mount -o loop file.iso /mnt/dir

để ngắt kết nối, bạn chỉ cần sử dụng umountlệnh

umount /mnt/dir

Nếu hệ điều hành của bạn không có tùy chọn này, bạn có thể tạo một thiết bị lặp :

losetup -f # this will print the first available loop device ex:/dev/loop0
losetup /dev/loop0 /path/file.iso #associate loop0 with the specified file
mount /dev/loop0 /mnt/dir #It may be necessary specify the type (-t iso9660)

để umount bạn có thể sử dụng -d:

umount /mnt/dir
losetup -d /dev/loop0

Nếu tệp có phân vùng, ví dụ hình ảnh HD, bạn có thể sử dụng -Ptham số (tùy thuộc vào hệ điều hành của bạn), nó sẽ ánh xạ các phân vùng trong nội dung tệp:

losetup -P /dev/loop0 /path/file.iso # will create /dev/loop0 
ls /dev/loop0p* #the partitions in the format /dev/loop0pX

Điều này về cơ bản localhost(loopback!) Cho hình ảnh đĩa.
Cuộc đua nhẹ nhàng với Monica

2
losetupmount -o looplà đặc thù của Linux. Nó sẽ không hoạt động trên các bản phân phối GNU bằng một hạt nhân khác (như Hurd, illumos hoặc kFreeBSD mặc dù illumos và FreeBSD sẽ có tương đương với một cú pháp khác nhau)
Stéphane Chazelas

Dưới đây là một số chức năng để tự động hóa hơn nữa losetup: unix.stackexchange.com/a/430415/32558
Ciro Santilli 改造

6

Thử:

mount -o loop /path/to/file.iso /mnt

Bạn có thể thêm, sau loop:

  • -t msdos cho đĩa mềm
  • -t iso9660 cho hình ảnh CD-ROM

Linux thường cố gắng đoán loại tệp.


6

losetup -P tự động hóa cho hình ảnh đa phân vùng

Làm thế nào để gắn một hình ảnh đĩa từ dòng lệnh? | Unix & Linux Stack Exchange đã đề cập losetup -Pvà đây là một số hàm Bash tiện dụng để tự động hóa mọi thứ hơn nữa. Sử dụng:

$ los my.img
/dev/loop0
/mnt/loop0p1
/mnt/loop0p2

$ ls /mnt/loop0p1
/whatever
/files
/youhave
/there

$ sudo losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                                                                                      DIO
/dev/loop1         0      0         0  0 /full/path/to/my.img

$ # Cleanup.
$ losd 0
$ ls /mnt/loop0p1
$ ls /dev | grep loop0
loop0

Nguồn:

los() (
  img="$1"
  dev="$(sudo losetup --show -f -P "$img")"
  echo "$dev"
  for part in "$dev"?*; do
    if [ "$part" = "${dev}p*" ]; then
      part="${dev}"
    fi
    dst="/mnt/$(basename "$part")"
    echo "$dst"
    sudo mkdir -p "$dst"
    sudo mount "$part" "$dst"
  done
)
losd() (
  dev="/dev/loop$1"
  for part in "$dev"?*; do
    if [ "$part" = "${dev}p*" ]; then
      part="${dev}"
    fi
    dst="/mnt/$(basename "$part")"
    sudo umount "$dst"
  done
  sudo losetup -d "$dev"
)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.