LINUX.ORG.RU

Клонировать ext4 в sparse file

 ,


0

1

Нужно скопировать раздел ext4 (скажем, /dev/sda1) в sparse file на другом диске. При этом свободное пространство нужно копировать как нулевые байты, а не как случайный мусор, который там есть, чтобы sparse file получился как можно меньшего размера.

Как сделать это с разделом NTFS, я знаю: надо использовать ntfsclone, это его дефолтный режим. А как сделать это с родной линуксовой ext4, не знаю.

Пробовал:

  • zerofree /dev/sda1 && cp --sparse=always /dev/sda1 /target/file: работает, но ведь это очень неэффективно и даже опасно
  • partclone: клонирует только в свой особый формат, а мне надо обычный sparse file, чтобы можно было его прямо mount

Как же это сделать?

★★★★★

свободное пространство нужно копировать как нулевые байты

Но ведь где в /dev/sda1 свободное пространство может знать только драйвер ext*, и так просто он эту информацию не отдаст.

Кажется что самый простой способ примонтировать раздел и скопировать файлы(+ можно пропустить ненужные)

disarmer ★★★
()
dd if=/dev/zero of=/zero bs=4M && rm /zero

А дальше сконвертируй диск в qcow2. Можно со сжатием. qcow2 примонтируй куда хочешь.

Black_Roland ★★★★
()

А обязательно нужен файл? Можно создать LVM том, который будет расширяться по мере заполнения данными (Thin Provisioning ). Только discard включи.

Black_Roland ★★★★
()
Последнее исправление: Black_Roland (всего исправлений: 1)
Делаешь спарс-файл
$ dd if=/dev/zero of=file_sda1.img seek=200G bs=1 count=1

форматируешь его
$ /sbin/mkfs.ext4 file_sda1.img
монтируешь
$ sudo mount -o loop file_sda1.img /mnt
$ cd /mnt
копируешь только значимые данные
$ sudo dump -0 -f - /dev/sda1 | sudo restore -r -f -
$ sudo umount /mnt

Всё. Безопасно, просто, заодно и дефрагментация.

anonymous
()
Ответ на: комментарий от disarmer

Но ведь где в /dev/sda1 свободное пространство может знать только драйвер ext*, и так просто он эту информацию не отдаст.

Но ведь partclone точно так же знает, где там свободное место. Раздел не примонтирован. Юзерспейсная программа, умеющая работать с ext4, вполне может определить, где там что.

proud_anon ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Всё. Безопасно, просто, заодно и дефрагментация.

Вот ты меня навёл на хорошую мысль. У partclone есть режим копирования с девайса на девайс с пропуском пустого места. Я им никогда не пользовался, но попробую сейчас сделать так:

dd if=/dev/zero of=/target/file conv=sparse bs=4096 count=<размер FS / 4096>
partclone.ext4 --dev-to-dev -s /dev/sda1 -o /target/file

Посмотрим, что будет.

proud_anon ★★★★★
() автор топика
Последнее исправление: proud_anon (всего исправлений: 2)
Ответ на: комментарий от proud_anon

Partclone now supports ext2, ext3, ext4, ....

Всё правильно, в partclone очевидно встроены драйвера (возможно только часть для чтения пространства, занятого структурой/файлами), поэтому он умеет читать ext4 и пропускать ненужные блоки. Можно найти юзерспейсную программу, которая будет уметь то же самое + писать в нужном формате, или написать свою.

disarmer ★★★
()
Ответ на: комментарий от proud_anon

Это dd if=/dev/zero of=/target/file conv=sparse bs=4096 count=50000000 работает очень долго по сравнению с dd if=/dev/zero of=sparse.file seek=200G bs=1 count=1

при одинаковых результатах

anonymous
()
Ответ на: комментарий от proud_anon

*** buffer overflow detected ***: partclone.ext4 terminated

Говно этот partclone. Ужас. NTFS клонировать — с ntfsclone всё прекрасно, а родную линуксовую ФС — фигушки.

Придётся, видимо, либо zerofree, либо просто копировать файлы.

proud_anon ★★★★★
() автор топика
Ответ на: комментарий от anonymous

dump/restore чем не устраивает?

Я только сейчас про него узнал. Но насколько я понимаю из man'а, он ведь копирует отдельные файлы, а не раздел как есть?

proud_anon ★★★★★
() автор топика
Ответ на: комментарий от anonymous

А какая цель копирования раздела в файл? Бекап?

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

proud_anon ★★★★★
() автор топика
Последнее исправление: proud_anon (всего исправлений: 1)
Ответ на: комментарий от proud_anon

Ну тогда достаточно только dump

dump -0 -f /path/to/sda1_partition.dump

можно добавить dump -m для сжатия или пропустить через gzip/xz/bzip2/...

anonymous
()
Ответ на: комментарий от anonymous

dump -0 -f /path/to/sda1_partition.dump /dev/sda1

anonymous
()
Ответ на: комментарий от anonymous

Ладно, спасибо. Видимо, придётся этим обойтись.

proud_anon ★★★★★
() автор топика

(скопировать раздел ext4) + (как можно меньшего размера) = dump

зачем изобретать лесипет???

axelroot
()
Ответ на: комментарий от axelroot

Ты бы тему дочитал перед тем как постить то что уже обсуждено.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.