Як встановити `img`, створений за допомогою / bin / dd жорсткого диска?


19

Я використовував ddрезервну копію накопичувача на 80 Гб

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

Тепер мені потрібно отримати доступ до деяких файлів на цьому диску, але я не хочу копіювати ".img" назад на диск.

mount ~/sdb.img /mnt/sdbтеж не працює. Він повертає:

mount: you must specify the filesystem type

Я спробував знайти тип файлової системи 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

Чи можливо встановити sdb.imgабо потрібно використовувати ddдля відновлення накопичувача?

Відповіді:


27

При використанні ddна /dev/sdbзамість /dev/sdb1або /dev/sdb2, скопіювати всі на розділи від зазначеного диска в один файл.

Ви повинні змонтувати кожен розділ окремо.


Щоб змонтувати розділ з файлу , слід спочатку з’ясувати, де у файлі знаходиться цей розділ.

Використовуючи ваш вихід з, file -s sdb.imgми знаходимо startsectorsдля кожного розділу:

sdb.img: завантажувальний сектор x86; розділ 1 : ідентифікатор = 0х12, пускова головка 1, пусковий сектор 63 , 10233342 сектори; розділ 2 : ID = 0xc, активний, starthead 0, startsector 10233405 , 72517410 сектори; розділ 3 : ID = 0xc, starthead 0, startsector 82750815 , 73545570 сектори, зсув коду 0xc0

Розділ      Startsector
1 63
2 10233405
3 82750815

Щоб змонтувати один розділ, де X знаходиться початковий сектор цього розділу, запустіть:

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

Отже, щоб змонтувати другий розділ , вам доведеться запустити:

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

sidenote: переконайтеся, що /mnt/sdb2існує перед тим, як запустити це.

Веселіться!


оновлення: У відповіді я припускав, що розмір сектора для зображення 512, будь ласка, дивіться це питання про те, як це обчислити.


Ви також можете отримати початкові сектори в табличному форматі, використовуючи file -l sdb.imgвідповідні запитання: unix.stackexchange.com/questions/2668/…
студент

@student: Тільки виправлення для читачів майбутніх: Це було б fdisk -lНЕ file -l.
Руніум

Подальше уточнення - ви можете отримати кількість 512 байтових секторів, додавши до цієї команди опцію -u - значитьfdisk -u -l sdb.img
Аарон Мейсон

Якщо ваша версія fileменш говіркі за замовчуванням, спробуйте додати -kперемикач , щоб отримати вид продукції , показаний у відповідь - як це: file -k FILENAME.img.
Крістіан Піетш

7

У Linux-командах монтування в межах прийнятої відповіді неявно створюється циклічний пристрій. Якщо припустити, що повне зображення диска має правильну таблицю розділів (яку може зрозуміти ваше ядро), ви можете скористатися losetup(8)безпосередньо, щоб зберегти вам клопоти з розрахунку компенсацій. Також немає необхідності в додаткових інструментах, як kpartxце пропонується в іншій відповіді . Це в основному зробить те саме, що й наступне:

losetup -Prf sdb.imgбуде пов’язувати перший пристрій вільного циклу ( -f) як тільки для читання ( -r) з файлом зображення sdb.img. Цей -Pпараметр змушує ядро ​​сканувати таблицю розділів цього циклу і створюватиме петльові пристрої для кожного розділу.

Тож ви можете отримати щось на кшталт:

$ 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
...

Тепер ви можете змонтувати кожний розділ, звичайно, лише в потрібному місці монтажу.

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

Зберігати все в режимі читання лише необов’язково, але це може бути непогано зробити для резервного зображення.

update: -PОпція була додана з util-linux-2.21 у 2012 році. Отже, вона не була доступна під час написання прийнятої відповіді. Також зауважте, що ця та інші відповіді є специфічними для Linux. OpenBSD і NetBSD мають диски vnode, якими керує, vnconfig(8)а FreeBSD - диски пам'яті, якими керує mdconfig(8).


2

Крім того, ви можете використовувати приємний інструмент під назвою kpartx. На чоловіковій сторінці:

kpartx - Створення карт пристроїв із таблиць розділів

Це означає, що ви можете зробити "псевдопристрій" із розділами пристрою прямо з файлу 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

Потім ви можете монтувати, /dev/mapper/loop0p2наприклад, якщо ви хочете другий розділ на зображенні.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.