Монтирование нескольких img файлов как единственное циклическое устройство

Большую часть времени лучшая команда для использования является lsof (“список открытые файлы”).

lsof +f -- /media/usb0

где /media/usb0 точка монтирования Карты памяти или другой файловой системы для размонтирования. +f -- говорит lsof рассматривать последующий аргумент как точку монтирования; это обычно, но не всегда, справляется самостоятельно, так, чтобы lsof /media/usb0 также работы. Это находит открытые файлы (даже несвязанные), файлы с отображенной памятью, текущие каталоги и некоторое более неясное использование. Необходимо будет выполнить команду как корень для получения информации о процессах других пользователей (и я думаю, что существуют нельды где lsof должен быть выполнен как корень).

Существует использование, которое не найдет lsof; они являются редкими на съемных носителях. Они включают:

  • точки монтирования: Вы не можете размонтироваться /foo если /foo/bar точка монтирования.
  • смонтируйте устройства: Вы не можете размонтироваться /foo если /foo/bar смонтированное блочное устройство или смонтированный циклом регулярный файл, или если это - источник Linux, связывают, монтируются.
  • Экспорт NFS: lsof не обнаружит, что дерево экспортируется ядром сервер NFS.

Другая команда, которая может служить в повышении, является термофиксатором, который только перечисляет PIDs процессов с открытыми файлами на устройстве:

fuser -m /media/usb0

19
05.03.2014, 18:04
5 ответов

Я не думаю, что можно сделать это на месте, но если у Вас есть достаточно пространства, это должно работать:

# 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 ГБ, необходимо просто переключиться на нормальный.

16
27.01.2020, 19:45
  • 1
    Смогший, чтобы сделать это с картопостроителем устройства также, но вышеупомянутым легче. –  Wodin 21.08.2011, 02:22
  • 2
    Извините за занимание много времени для принятия, очень хороший ответ. Я не сделал бы этого при нормальном обстоятельстве, его больше вопроса о режиме приключения. –  MageProspero 03.09.2011, 21:22
  • 3
    Вы, вероятно, хотите использовать truncate вместо dd поскольку это намного быстрее (это не выполняет фактическую запись к FS, но просто выделяет inodes и файл метки как просто содержащий дыру). –  Maciej Piechotka 19.09.2011, 01:56
  • 4
    . Я не знал это. код –  stribika 23.09.2011, 20:40
  • 5
    На основе опыта при использовании большой емкости облачное резервное копирование или решения для синхронизации как CrashPlan или заплаченный Google Drive, это очень, очень хорошая идея использовать маленькие файлы разделения вместо единственного огромного файла. В случае неудавшейся загрузки файла необходимо будет только повторно загрузить, скажем, 1 ГБ вместо целой вещи на 100 ГБ. –  RAKK 14.04.2017, 22:50

Под BSD можно использовать опцию объединения смонтироваться. В соответствии с Linux можно дать попытку unionFS.

-1
27.01.2020, 19:45
  • 1
    Это не выглядит удаленно релевантным. Вы неправильно читали вопрос? –  Gilles 'SO- stop being evil' 22.08.2011, 16:27

Самая близкая вещь, которую я знаю до сих пор к решению, состоит в том, чтобы создать VM VMware. Вы запускаете Linux живой CD как Rescatux или Knoppix, Вы создаете совместно используемую папку SMB на своем главном компьютере, Вы монтируете, что SMB совместно использует на Вашем VM и затем Вас dd изображение в виртуальный HD. VMware по умолчанию сохраняет свои образы диска как файлы разделения, таким образом, это - самая близкая вещь к чтению непосредственно образа диска, разделенного на несколько файлов.

Позже, если Вы хотите получить доступ к файлам от своего главного компьютера, можно попытаться добавить второй виртуальный HD к изображению и скопировать файлы там. Затем Вы настраиваете совместно используемую папку SMB на VM и подключении к нему от Вашего хоста. Таким образом, можно, например, нарушить предел файла на 4 ГБ FAT32, если Вы используете iPod classic (который только groks fat32), или SD-карта Вашего смартфона (обычно, необходимо установить пользовательский ROM для использования Ext3 или NTFS на внешнем устройстве хранения данных, для этого Вы требуете телефона от популярного производителя как Samsung или Motorola, поэтому если у Вас есть китайский смартфон, Вы озадачены).

Это - по общему признанию не эффективное решение, однако, но так как я был ограничен, не будучи способен использовать любой FS кроме fat32 на моем iPod classic или моих смартфонах Samsung с ROM запаса, я обыскивал в значительной степени весь Интернет в прошлом и все еще не могу найти эффективное решение этого. Мне, возможно, даже придется записать это самому.

PS: Забыл упоминать, что, если Вы находитесь в Windows, это могло бы быть единственным способом сделать это.

0
27.01.2020, 19:45
  • 1
    Прошло некоторое время, так как я посетил эту проблему. У меня все еще есть он. Также у меня есть он точно та же причина, которую Вы делаете. Интересно, можно ли поднять процесс, который имеет свою собственную пользовательскую файловую систему, честно я хотел бы делать попытку этого. Я знаю, что могу сделать это в узле. Я имел успех, поднимающий интерпретатор во внедренном. Я не знаю, решает ли это Вашу проблему хотя, если я сделал. На моих аппаратных средствах галактики Samsung это прекрасно. Скажите мне, хотели бы Вы работать над чем-то для этой проблемы вместе. –  MageProspero 29.10.2013, 03:08

Чтобы смонтировать разделенный образ диска (или образ раздела), вы должны использовать affuse из afftools, которые в настоящее время поддерживаются здесь: 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 байтам.

3
27.01.2020, 19:45

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

Здесь вы можете найти пример использования предохранителя.https://github.com/libfuse/python-fuse/blob/master/example/hello.py

1
27.01.2020, 19:45

Теги

Похожие вопросы