Действительно ли возможно смонтировать gzip, который сжатые dd отображают на лету?

Следует иметь в виду это части /etc требуются, чтобы быть читаемым даже непривилегированными пользователями. Если существуют вещи в /etc это не должно быть читаемо, но, у Вас есть большие проблемы, и в минимуме должен работать, полномочия Вашего распределения проверяют/устраняют программу.

Тюрьма является самым легким способом настроить драконовские ограничения. Существуют другие пути, такие как установка SElinux и принимают меры, чтобы у пользователя был очень ограниченный контекст защиты.

69
04.09.2016, 00:39
6 ответов

Это зависит от того, является ли образ диска полным образом диска или просто разделом.

Промывка раздела (разделов)

Если диск будет в хорошем рабочем состоянии, то Вы получите лучшее сжатие при промывке вакуума на диске с нулями. Если диск перестал работать, пропустите этот шаг.

При обработке изображений всего диска затем, Вы захотите промыть каждый из разделов на диске.

Внимание: Будьте осторожны, Вы хотите установить of в файл в смонтированном разделе, НЕ САМОМ РАЗДЕЛЕ!

mkdir image_source
sudo mount /dev/sda1 image_source
dd if=/dev/zero of=image_source/wash.tmp bs=4M
rm image_source/wash.tmp
sudo umount image_source

Создание изображения раздела

mkdir image
sudo dd if=/dev/sda1 of=image/sda1_backup.img bs=4M

Где sda название устройства, и 1 число раздела. Корректируйтесь соответственно для Вашей системы, если Вы хотите отобразить другое устройство или раздел.

Создание целого образа диска

mkdir image
sudo dd if=/dev/sda of=image/sda_backup.img bs=4M

Где sda название устройства. Корректируйтесь соответственно для Вашей системы, если Вы хотите отобразить другое устройство.

Сжатие

Заставьте "squashfs" отобразить, который содержит полное несжатое изображение.

sudo apt-get install squashfs-tools
mksquashfs image squash.img

Потоковая передача сжатия

Чтобы постараться не делать отдельный временный файл полным размером диска, можно передать потоком в изображение squashfs.

mkdir empty-dir
mksquashfs empty-dir squash.img -p 'sda_backup.img f 444 root root dd if=/dev/sda bs=4M'

Монтирование сжатого изображения раздела

Сначала смонтируйте изображение squashfs, затем смонтируйте изображение раздела, сохраненное в смонтированном изображении squashfs.

mkdir squash_mount
sudo mount squash.img squash_mount

Теперь Вам смонтировали сжатое изображение, монтируете само изображение (который является в изображении squashfs),

mkdir compressed_image
sudo mount squash_mount/sda1_backup.img compressed_image

Теперь Ваше изображение смонтировано под compressed_image.

Править: Если Вы хотели просто восстановить образ диска на раздел в этой точке (вместо того, чтобы монтировать его для просматривания/читавшего содержания), просто dd изображение в squash_mount/sda1_backup.img на место назначения вместо выполнения mount.

Монтирование сжатого полного образа диска

Это требует, чтобы Вы для использования пакета, названного kpartx. kpartx, позволили Вам монтировать отдельные разделы в полном образе диска.

sudo apt-get install kpartx

Во-первых, смонтируйте свой раздавленный раздел, который содержит полный образ диска

mkdir compressed_image
sudo mount squash.img compressed_image

Теперь необходимо создать устройства для каждого из разделов в полном образе диска:

sudo kpartx -a compressed_image/sda_backup.img

Это создаст устройства для разделов в полном образе диска в /dev/mapper/loopNpP где N является номером, присвоенным для устройства закольцовывания, и P является числом раздела. Например: /dev/mapper/loop0p1.

Теперь у Вас есть способ смонтировать отдельные разделы в полном образе диска:

mkdir fulldisk_part1
sudo mount /dev/mapper/loop0p1 fulldisk_part1
69
27.01.2020, 19:31
  • 1
    интересное взятие на этой проблеме (squashfs вместо gzip). Я довольно незнаком с squashfs инструментами... можно ли передать вывод по каналу dd для создания раздела сквоша на лету, как Вы можете с gzip разделом? то, каковы степени сжатия (gzip хорошо/хороший, особенно учитывая тот факт, что я очищаю 'вакуум с нулями')? –  g19fanatic 13.05.2013, 06:12
  • 2
    , как был бы Вы dd изображение назад к жесткому диску? –  g19fanatic 13.05.2013, 06:15
  • 3
    @g19fanatic несжатый образ диска "в" изображении squashfs. Вы монтируете изображение squashfs, затем dd изображение в нем к целевому диску. –  doug65536 13.05.2013, 08:27
  • 4
    @g19fanatic сжатие был превосходен (очень почти то же как gzip в моем случае). mksquashfs был быстр также, он параллелизируется. На моем 990x (6 ядер) это было на самом деле ограничено скоростью записи целевого диска вокруг 100MB/sec. –  doug65536 13.05.2013, 08:29
  • 5
    @g19fanatic можно передать потоком в использование squashfs -p или -pf флаги для передачи его псевдофайл. Псевдо файл может использоваться для вещей как создание узлов устройства, которые Вы не можете иначе обойтись без корня (полезный для создания изображений как часть процесса сборки) или для потоковой передачи вывода некоторой команды в изображение. Один из примеров дан в документах (/usr/share/doc/squashfs-tools/examples/pseudo-file.example на Debian/Ubuntu), input f 444 root root dd if=/dev/sda1 bs=1024 count=10 скопировать первый 10K с образа диска в файл, названный "входом" в изображении squashfs. большое спасибо –  Brian Campbell 22.07.2014, 06:45

Не совсем. Вы не можете действительно искать на определенный блок в сжатом файле, не распаковывая все это сначала, которое мешает использовать сжатое изображение в качестве блочного устройства.

Вы могли использовать что-то как dump и restore (или tar, действительно), все из которых используют формат потоковой передачи..., таким образом, можно получить доступ к invidividual файлам путем эффективного сканирования через несжатый поток. Это означает, ли файл, который Вы хотите, в конце сжатого архива, у Вас может быть долгое время для ожидания, но это не требует, чтобы Вы на самом деле распаковали все на диск.

Используя tar поскольку резервные копии могут казаться немного старомодными, но Вы получаете большую гибкость.

8
27.01.2020, 19:31
  • 1
    Проблема заключается в том, что я даже не знаю, находится ли файл интереса на самом деле на этом сжатом резервном копировании... Вы знаете о файловом менеджере, который пройдет целое изображение .gz'd, сохранить структуру файла/dir в памяти, обеспечить простое представление структуры и позволить Вам 'выбирать' файлы (теперь, когда это знает, где они существуют) извлечь? Это очень нишевая спецификация..., но я видел тонны использования для чего-то вроде этого..., если это существует. –  g19fanatic 15.02.2012, 14:09
  • 2
    Если бы это не делает, Вы смогли бы указать на меня к некоторой инструкции относительно того, как вытянуть структуру из изображения gz'd? Я смог бы создать такую программу (программа для жизни...), но являюсь слепым по теме распаковки данных изображения и специфических особенностей различных файловых систем. –  g19fanatic 15.02.2012, 14:11
  • 3
    я подозреваю, что создание Вашего собственного инструмента будет большим проектом, чем Вы действительно, хочет предпринять. Однако... предположение, что у Вас есть расширение [234] файловая система, я предложил бы e2fsprogs пакет или возможно что-то как предохранитель-ext2. Оба обеспечивают инструменты пространства пользователя для взаимодействия с расширением [234] файловые системы. –  larsks 15.02.2012, 15:59
  • 4
    Также обратите внимание, что то, что Вы имеете, кажется, не изображение файловой системы, это - целый образ диска, что означает, что необходимо будет сначала проанализировать таблицу разделов и определить местоположение соответствующего раздела. –  larsks 15.02.2012, 16:00
  • 5
    я ввел с опечаткой в вышеупомянутом вопросе и зафиксирую его. Я обычно делаю раздел, базирующиеся dd отображают и сохраняют копию таблицы разделов. Я раньше делал целые дисковые копии, но очень не хотел должным быть смонтироваться с опциями добраться до надлежащего местоположения. –  g19fanatic 15.02.2012, 16:51
[1184292]Попробуйте [12119]archivemount[12120]archivemount - файловая система на основе FUSE для Unix-вариантов, включая Linux. Его назначение - монтирование архивов (т.е. tar, tar.gz и т.д.) в точку монтирования, из которой они могут быть считаны или записаны, как и из любой другой файловой системы. Это делает доступ к содержимому архива, которое может быть сжато, прозрачным для других программ, без их распаковки.[12121]http://linuxaria.com/howto/how-to-mounts-an-archive-for-access-as-a-file-system[12122]После монтирования архива вы можете использовать его содержимое как обычный файл. Может быть, получить таблицу разделов, или конвертировать, смонтировать образ с помощью утилит qemu.[12123]squashfs полезны для загрузки с образа, но очень сложны для резервного копирования.[1184301].
16
27.01.2020, 19:31

Если изображение является только для чтения, Вы также можете использовать nbdkit (man page) и его xz плагин (xz должен обеспечивать лучшее сжатие и случайное время доступа, чем gzip).

Создание сжатого образа раздела

dd if=/dev/sda1 bs=16M | xz -9 --block-size=16MiB - > sda1.img.xz

A -объём блока должен обеспечивать хорошую производительность при случайном доступе.

Примечание: Вы можете использовать альтернативные программы сжатия xz, такие как pixz , которые обеспечивают параллельное сжатие, просто убедитесь, что он разбивает вывод на несколько маленьких блоков, в противном случае nbdkit должен распаковывать большое количество данных. Например, по состоянию на сентябрь 2015 г. pxz этого не поддерживает.

Отправьте его с помощью nbdkit

nbdkit --no-fork --user nobody --group nobody -i 127.0.0.1 \
       xz file=sda1.img.xz

Подключите к серверу NBD

nbd-client 127.0.0.1 10809 /dev/nbd0 -nofork

Установите его только для чтения

mount -o ro /dev/nbd0 sda1

После завершения

umount /dev/nbd0
nbd-client -d /dev/nbd0

Остановите nbdkit, нажав Ctrl+C (или с помощью kill).

.
16
27.01.2020, 19:31

Этот ответ дополняет ответ Кристиана Сьюпиту . Если вы используете сжатие xz с разумным размером блока, вы можете получить доступ к образу диска, используя guestfish или другие инструменты libguestfs, как например:

nbdkit xz file=disk.img.xz --run 'guestfish --format=raw -a $nbd -i'

UPDATE: Так как xz больше не является плагином, а стал фильтром, команда теперь:

nbdkit file disk.img.xz --filter xz --run 'guestfish --format=raw -a $nbd -i'
10
27.01.2020, 19:31

Еще одно дополнение к ответу Кристиана Чупиту:

Если вы используете nbdkitдля монтирования полного образа диска(вместо образа раздела ),вам может потребоваться указать размер блока (размер сектора диска )при подключении к серверу NBD, так как по умолчанию он равен 1024байт. Чтобы использовать 512байт вместо:

nbd-client 127.0.0.1 /dev/nbd0 -b 512 -n

После этого диск будет отображаться как /dev/nbd0, и вы сможете просмотреть таблицу разделов, используя fdisk -l. Однако разделы еще не монтируются -. Используйтеkpartx(из ответа doug65536)для создания устройств для разделов, например.:

kpartx -arv /dev/nbd0

Наконец, разделы появятся в /dev/mapper/, и вы сможете их монтировать как обычно. Обязательно используйте режим только для чтения (-o ro), так как плагин xz поддерживает только чтение :

.
mount -o ro /dev/mapper/nbd0p3 /mnt
3
27.01.2020, 19:31

Теги

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