Монтаж декількох файлів img як пристрій з одним циклом


19

Чи є спосіб взяти файл img диска, розбитий на частини, і змонтувати його як єдиний пристрій?


1
Як воно порушено? Який це формат? Для цього може бути якась магія запобіжників, якщо це спеціальний формат, але я підозрюю, що відповідь - це спіткати їх разом!
Калеб

Я обмежений форматом пристрою файлами розміром менше 4 гігів. У мене є кореневий доступ, хоча до пристрою. Можна щось із LVM
MageProspero

Відповіді:


16

Я не думаю, що ви можете це зробити на місці, але якщо у вас є достатньо місця, це має працювати:

# Create the files that will hold your data
dd if=/dev/zero of=part-00 bs=1M count=4k
dd if=/dev/zero of=part-01 bs=1M count=4k

# Create the loop devices
losetup /dev/loop0 part-00
losetup /dev/loop1 part-01

# Create a RAID array
mdadm --create /dev/md0 --level=linear --raid-devices=2 /dev/loop0 /dev/loop1

# Copy the original filesystem
dd if=original-file-00 of=/dev/md0 bs=512
# Look at the records written value
dd if=original-file-01 of=/dev/md0 bs=512 seek=<sum of records written values so far>

# Mount the new filesystem
mount /dev/md0 /mnt

Ви не можете просто створити масив RAID з вихідних файлів, оскільки диски RAID мають певний заголовок, де зберігається кількість дисків, рівень RAID тощо. Якщо ви це зробите, частина початкових файлів буде перезаписана.

Ви можете використовувати mdadm --buildдля створення масиву без метаданих, але тоді спочатку слід створити резервну копію. Або якщо кріплення для читання достатньо:

losetup -r /dev/loop0 original-00
losetup -r /dev/loop1 original-11
mdadm --build /dev/md0 --level=linear --raid-devices=2 /dev/loop0 /dev/loop1
mount /dev/md0 /mnt

Чому ти хочеш це робити? Якщо ваша файлова система не може обробити файли 4 Гб, просто слід перейти на здоровий.


Можливо, це можна зробити і з картографічним пристроєм пристроїв, але вище сказане простіше.
Водін

Вибачте за те, що прийняли так довго, щоб прийняти, дуже хороший відповідь. Я б не робив цього за звичайних обставин, його більше питання про пригодницький режим.
MageProspero

2
Ви, ймовірно, хочете використовувати truncateзамість того dd, що це набагато швидше (він не виконує фактичне записування в FS, а просто виділяє вставки та маркує файл як просто містить отвір).
Мацей П'єхотка

Приємно. Я цього не знав.
stribika

З досвіду, якщо ви використовуєте хмарні резервні копії чи синхронізуючі рішення, такі як CrashPlan або платний Диск Google , дуже хороша ідея використовувати невеликі розділені файли замість одного величезного файлу. У разі невдалого завантаження файлу, вам доведеться лише повторно завантажити, скажімо, 1 Гб замість всього об'єму в 100 ГБ.
RAKK

3

Щоб змонтувати зображення розділеного диска (або зображення розділу), слід скористатись affuseафілерами, які зараз підтримуються тут: https://github.com/sshock/AFFLIBv3

Отже, якщо у вас є файл, розділіть його на декілька підфайлів test_img.000, test_img.001, test_img.002, test_img.003, test_img.004, test_img.005, test_img.006, test_img.007, test_img.008, test_img.009

тоді ви можете приєднатись до них практично affuse

# affuse test_img.000 /mnt/combine
# ls -lh /mnt/combine
total 0
-r--r--r-- 1 root root 2.0G 1969-12-31 16:00 test_img.000.raw

(це поєднує всі файли разом, починаючи з файлу 000, потім 001, 002,…)

А потім змонтуйте зображення

mount -o ro,loop,offset=329043456 /mnt/combine/test_img.000.raw /mnt/test

Використання описано тут, а деякі приклади - тут . Сторінка також доступна після компіляції та встановлення, або тут .

PS: Для мене affuseпрацював лише в тому випадку, якщо розділені файли мали розмір, кратний 512 байтам.


4
Я просто спробував цей метод. У ньому є головне застереження: воно дозволить вам змонтувати зображення лише для читання.
RAKK

Чудово працює, якщо у вас є лише сотні, а не тисячі фрагментів файлів. Можливо, краще використовувати mdadm для створення лінійного рейдового розділу: unix.stackexchange.com/a/98779/22709
Джей Тейлор

1

Ви можете написати власне розширення пристрою зберігання блоків (придумайте розширення, схоже на запобіжник) та виконувати пошуки залежно від адреси.

Тут ви можете знайти приклад використання запобіжника https://github.com/libfuse/python-fuse/blob/master/example/hello.py


дякую, я дійсно повинен обернути голову навколо
метакружності

0

Найближче, що я знаю поки що до рішення, - це створити VMware VM. Ви запускаєте живий компакт-диск Linux на зразок Rescatux або Knoppix, створюєте загальну папку SMB на своєму хост-комп'ютері, встановлюєте цей спільний доступ до SMB у своєму VM, а потім переводите ddзображення у віртуальний HD. За замовчуванням VMware зберігає свої дискові зображення як розділені файли, тому це найближче зачитування зображення диска, розділеного на кілька файлів.

Пізніше, якщо ви хочете отримати доступ до файлів з хост-комп'ютера, ви можете спробувати додати до зображення друге віртуальне HD та скопіювати туди файли. Потім ви налаштували загальну папку SMB у VM та підключитесь до неї від свого хоста. Таким чином, ви можете, наприклад, порушити ліміт файлів на 4 Гб FAT32 у випадку, якщо ви користуєтесь iPod Classic (який лише заробляє fat32) або SD-карткою вашого смартфона (зазвичай вам потрібно встановити користувальницький ПЗУ для того, щоб щоб використовувати Ext3 або NTFS на зовнішньому сховищі, для цього вам потрібен телефон від такого популярного виробника, як Samsung або Motorola, тож якщо у вас китайський смартфон, ви натикаєтесь).

Це, правда, не є ефективним рішенням, але, оскільки я обмежений тим, що не маю можливості використовувати будь-який інший FS, крім fat32, на своєму iPod Classic або на своїх смартфонах Samsung із запасом ROM, я дуже багато переглянув весь Інтернет. минуле і досі не в змозі знайти ефективного рішення цього. Можливо, мені доведеться навіть сам це написати.

PS: Забув згадати, що якщо ви працюєте в Windows, це може бути єдиний спосіб зробити це.


Минуло певний час, як я відвідав цю проблему. У мене все ще є. Також у мене це точно так само, як і у вас. Цікаво, чи можете ви створити процес, який має власну власну файлову систему, чесно, я б хотів це зробити. Я знаю, що можу це зробити у вузлі. Я мав успіх привести кореневого перекладача. Я не знаю, чи це вирішує вашу проблему, хоча б і я. У моїх апаратних галактиках Samsung це добре. Скажіть, чи хотіли б ви разом попрацювати над цією проблемою.
MageProspero

-1

Під BSD ви можете використовувати опцію з'єднання для монтажу. У Linux можна спробувати unionFS.


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