Сжатый образ диска на Linux

Сжатый образ диска на Linux

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

Мои цели:

  • Результат должен быть легкодоступным
  • Нет необходимости распаковывать все, прежде чем я смогу получить доступ к чему-либо.
  • Файлы должны быстро находиться — архив TAR/CPIO отсутствует
  • Необходимого места должно быть меньше, чем при простом копировании файлов.

Поэтому в идеале я ищу сжатую файловую систему, доступную только для чтения, которую я могу создать в файле и которая будет автоматически увеличиваться.

решение1

Используйте программное обеспечение для судебного анализа, напримерГАЙМАГЕР(открытый исходный код, sourceforge.net). Имеет приятный пользовательский интерфейс, позволяющий быстро создать сжатый образ всего жесткого диска.

Используйте «Расширенный криминалистический образ (.aff)». Это создаст один сжатый файл (ну, а также файл .info).

Чтобы изменить скорость сжатия по умолчанию 1 (самая быстрая, но с наименьшим сжатием). Если у вас быстрый компьютер с большим количеством ядер, вы можете изменить это, создав /etc/guymager/local.cfg:

AffCompression = 3

9является лучшим, но самым медленным сжатием. 3обеспечивает хорошее сжатие с хорошей производительностью.

Обновлять

Монтаж не так прост, как кажется. Прежде всего, вам нужноАФФЛИБ(Ubuntu: aptitude install afflib-tools). Теперь вы можете получить сырой образ диска с помощью[affuse][3] <image> <mount-point>

Но по какой-то причине монтирование образа raw не удается. partedговорит, что первый раздел начинается с 1048576Bbut

mount -t ext4 -o loop,ro,offset=1048576 /mnt/backup.raw /mnt/backup

завершается с обычной бесполезной ошибкой монтирования:

mount: wrong fs type, bad option, bad superblock on /dev/loop0,
   missing codepage or helper program, or other error
   In some cases useful info is found in syslog - try
   dmesg | tail  or so

и dmesgговорит:

EXT4-fs (loop0): VFS: Can't find ext4 filesystem

решение2

Как предполагает Маттиас Крулл в комментарии выше, qcow2 может быть хорошим форматом, который поддерживает сжатие для хранения образа диска. Он будет поддерживаться довольно долго, поскольку это формат для образов дисков виртуальной машины QEMU. Вот пример команды, которая сжимает /dev/sdaв сжатый файл образа sda.qcow2. По умолчанию используется сжатие zlib, но я думаю, что zstd может иметь лучшую степень сжатия. Для увеличения пропускной способности используется 8 потоков, но вам следует изменить это на количество ядер процессора, которое у вас есть.

qemu-img convert -c -p -S 512 -o compression_type=zstd" -f raw -O qcow2 -m 8 \
  /dev/sda sda.qcow2

Доступ к образу как к блочному устройству только для чтения. NBD (сетевое блочное устройство) можно использовать следующим образом:

modprobe nbd
qemu-nbd -r -c /dev/nbd0 sda.qcow2
kpartx -av /dev/nbd0

Затем файловую систему можно смонтировать как обычно, используя mountсоответствующее устройство в /dev/mapper.

решение3

Для файловых систем, поддерживающих блочное сжатие, одним из вариантов является сохранение образа диска непосредственно в виде файла. Я знаю, что BTRFS поддерживает это, но, вероятно, и другие тоже. В случае BTRFS вам, скорее всего, потребуется включить опцию монтирования, compress-forceчтобы переопределить несжимаемую эвристику. Вам также понадобится создать разреженный файл. Это можно сделать с помощью dd, как в этом примере:

dd if=/dev/sda of=/mount/btrfs/sda.img conv=sparse,fsync iflag=nocache oflag=nocache

Это создаст разреженный файл, поэтому нулевые сектора не будут занимать место, а BTRFS будет сжимать блоки, которые можно сжимать (при условии, что вы включили эту функцию). Инструмент compsizeможно использовать для того, чтобы увидеть, насколько сжат файл. Использование duпокажет только размер несжатого файла за вычетом дыр, поэтому будет неточным.

Для монтирования любых файловых систем в образе можно использовать следующее:

LOOPDEV=$(losetup --show -f /mount/btrfs/sda.img)
kpartx -av "$LOOPDEV"
mount /dev/mapper/"$LOOPDEV"p3 # To mount the 3rd partition

Если вы не используете файловую систему с собственным сжатием, например, ext4, вы все равно можете использовать этот метод, обернув образ диска в образ файловой системы BTRFS. Это может выглядеть так:

truncate -s 100G backup-sda.btrfs.img
mkfs.btrfs backup-sda.btrfs.img
mount -o compress-force=zstd:9 backup-sda.btrfs.img /media/tmp
cd /media/tmp
# Now do commands to create disk image as above

Этот метод обеспечивает больший контроль над алгоритмами сжатия и уровнем сжатия, чем метод с использованием qemu-img convert, который позволяет выбирать только метод сжатия, но не уровень, и имеет меньше доступных методов сжатия.

Связанный контент