Bagaimana cara me-mount `img` yang dibuat dengan / bin / dd dari hard drive?

19

Saya dulu ddmembuat cadangan drive 80GB

dd if=/dev/sdb of=~/sdb.img

Sekarang saya perlu mengakses beberapa file di drive itu, tetapi saya tidak ingin menyalin ".img" kembali ke drive.

mount ~/sdb.img /mnt/sdbjuga tidak bekerja. Ia mengembalikan:

mount: you must specify the filesystem type

Saya mencoba mencari tipe sistem berkas file -s

fox@shoebox $ file -s sdb.img
sdb.img: x86 boot sector; partition 1: ID=0x12, starthead 1, startsector 63, 10233342 sectors; partition 2: ID=0xc, active, starthead 0, startsector 10233405, 72517410 sectors; partition 3: ID=0xc, starthead 0, startsector 82750815, 73545570 sectors, code offset 0xc0

Apakah mungkin untuk memasang sdb.img, atau haruskah saya gunakan dduntuk memulihkan drive?

rubah
sumber

Jawaban:

27

Bila Anda menggunakan ddpada /dev/sdbbukan /dev/sdb1atau /dev/sdb2, Anda menyalin semua yang partisi dari kata drive ke salah satu file yang.

Anda harus memasang setiap partisi secara terpisah.


Untuk me - mount partisi dari file , Anda harus terlebih dahulu mencari tahu di mana dalam file partisi itu berada.

Menggunakan output Anda dari file -s sdb.imgkami menemukan startsectorsuntuk setiap partisi:

sdb.img: sektor boot x86; partisi 1 : ID = 0x12, starthead 1, beginector 63 , 10233342 sektor; partisi 2 : ID = 0xc, aktif, awal 0, sektor awal 10233405 , 72517410 sektor; partisi 3 : ID = 0xc, awal 0, permulaan 82750815 , 73545570 sektor, kode offset 0xc0

Partisi      Startsector
1 63
2 10233405
3 82750815

Untuk me-mount satu partisi, di mana X adalah beginectorector dari partisi itu, jalankan:

mount ~/sdb.img /mnt/sdb -o offset=$((X*512))

Jadi untuk memasang partisi kedua , Anda harus menjalankan:

mount ~/sdb.img /mnt/sdb2 -o offset=$((10233405*512))

sidenote: pastikan sudah /mnt/sdb2ada sebelum Anda menjalankan ini.

Selamat bersenang-senang!


pembaruan: Dalam jawabannya, saya berasumsi bahwa ukuran sektor untuk gambar Anda adalah 512, silakan lihat pertanyaan ini tentang cara menghitungnya.

Stefan
sumber
Anda juga bisa mendapatkan permulaan dalam format tabel menggunakan file -l sdb.imgseperti yang diposting di jawaban pertanyaan Anda: unix.stackexchange.com/questions/2668/…
siswa
@student: Hanya koreksi untuk pembaca masa depan: Itu akan menjadi fdisk -ltidak file -l.
Runium
Klarifikasi lebih lanjut - Anda bisa mendapatkan jumlah sektor 512 byte dengan menambahkan opsi -u ke perintah itu - jadifdisk -u -l sdb.img
Aaron Mason
Jika versi filekurang banyak bicara secara default, coba tambahkan -ksaklar untuk mendapatkan jenis output ditunjukkan dalam jawaban - seperti ini: file -k FILENAME.img.
Christian Pietsch
7

Di Linux mount perintah dalam jawaban yang diterima secara implisit akan membuat perangkat loop. Dengan asumsi gambar disk lengkap memiliki tabel partisi yang benar (yang dapat dimengerti oleh kernel Anda), Anda mungkin lebih suka menggunakan losetup(8)secara langsung untuk menyelamatkan Anda dari kerumitan menghitung offset. Juga tidak perlu alat tambahan seperti yang kpartxdisarankan dalam jawaban lain . Ini pada dasarnya akan melakukan hal yang sama seperti berikut:

losetup -Prf sdb.imgakan mengaitkan perangkat loop gratis pertama ( -f) sebagai hanya baca ( -r) dengan file gambar sdb.img. The -Ppasukan opsi kernel untuk memindai tabel partisi dari perangkat loop ini dan akan membuat perangkat loop untuk setiap partisi.

Jadi, Anda mungkin mendapatkan sesuatu seperti:

$ lsblk
NAME      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0       7:0    0 167.7G  1 loop
├─loop0p1 259:0    0   500M  1 loop
└─loop0p2 259:1    0 167.2G  1 loop
...

Anda sekarang dapat me-mount setiap partisi, tentu saja hanya baca, pada mountpoint yang diinginkan.

$ mount -r /dev/loop0p1 /tmp/backup_sdb1

Menjaga semuanya tetap hanya baca adalah opsional, tetapi mungkin merupakan hal yang baik untuk dilakukan untuk gambar cadangan.

update: -Popsi ditambahkan dengan util-linux-2.21 pada 2012. Jadi tidak tersedia pada saat jawaban yang diterima ditulis. Perhatikan juga ini dan jawaban lainnya khusus untuk linux. OpenBSD dan NetBSD memiliki vnode disk yang dikelola oleh vnconfig(8)dan FreeBSD memiliki disk memori yang dikelola oleh mdconfig(8).

escrl
sumber
2

Atau, Anda dapat menggunakan alat yang bagus bernama kpartx. Dari halaman manual:

kpartx - Membuat peta perangkat dari tabel partisi

Ini berarti Anda dapat membuat "perangkat semu", dengan partisi perangkat, langsung dari file img:

$ kpartx -av sdb.img
add map loop0p1 (254:2): 0 2048 linear /dev/loop0 0
add map loop0p2 (254:3): 0 31162 linear /dev/loop0 2048
$ lsblk
.
.
.
loop0                     7:0    0  16.2M  0 loop
├─loop0p1               254:2    0     1M  0 part
└─loop0p2               254:3    0  15.2M  0 part

Maka Anda dapat memasang /dev/mapper/loop0p2misalnya, jika Anda ingin partisi kedua pada gambar.

Omer Dagan
sumber