LINUX.ORG.RU

Скопировать USB флешку поблочно, без копирования не занятого пространства.

 , ,


1

2

Здравствуйте. Возникла ситуация, есть флешка общим объемом 128ГБ. На ней записан допустим debian minimal boot (200МБ), тоесть полезно занятого пространства всего 0.2%. Вопрос - как сделать копию флешки?

dd - будет все 128ГБ копировать - не вариант.

брать например тот же clonezilla - он только в варианте live CD/USB, придётся бросать все дела за компьютером и загружаться с него, тоже не то.

partimage - ему разделы подавай, диск он скопировать не умеет, таблицу разделов надо самому переписывать. Хотя наверно это самый близкий к делу вариант, по крайней мере копирует только, как я понимаю, занятые блоки.

Есть что-то нормальное ? чтобы скопировало и таблицу разделов и содержимое и переписало только те самые 200МБ а не 128ГБ…? Я могу сделать всё это любым из трёх вариантов, но неужели нет решения нормального, из коробки…?

Спасибо. Гуглил по этому вопросу - молчит, может и я мимо прошёл, но везде только dd…

Ответ на: комментарий от tz4678

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

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

брать например тот же clonezilla - он только в варианте live CD/USB, придётся бросать все дела за компьютером и загружаться с него, тоже не то.

Поставь из реп partclone — это тоже самое. Если клонзилла тебе привычна и с ключами партклона пороться не хочется — запусти клонзиллу в виртуалке и пробрось туда нужные девайсы.

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

Если было фрагментирование на исходном устройстве то файлы в пределах устройства могут быть разбросаны произвольно. В общем случае не работает ваш пример 147%

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

Если контроллер флешки не совсем китайский дуб, конечно.

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

А не XY-problem ли это? Может лучше в таких случаях не разделы копировать, а подмонтировать этот образ, разжать его, сжать снова и записать на другую флешку или несколько флешек? Бит в бит может в общем случае не совпасть, но функционально то же самое будет.

Типа

sudo mount -o loop /dev/sdb1 mnt/
mkdir extract-cd
sudo rsync -a mnt/ extract-cd

xorriso -as mkisofs -o image.iso -isohybrid-mbr /usr/lib/syslinux/isohdpfx.bin -c isolinux/boot.cat -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table ./extract-cd

damix9 ★★★
()

clonezilla можно поставить в загруженую систему и запустить оттуда

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

Согласно описанной задаче был записан образ заданного размера; все разделы и ФС не выходят за пределы этого размера - значит, достаточно того, что я написал - скопировать только первые 200 метров.

Если задача стоит копировать минимум информации на больших разделах - ну, не знаю, пусть будет sgdisk -R для копирования структуры диска и дальше rsync для каждого раздела. Есть ли такие готовые инструменты - не знаю.

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

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

Да, соглашусь, что если изначально диск был залит через cat iso > /dev/sda то финт с dd первых N байт должен быть рабочим.

Спасибо за Ваш ответ.

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

Вот bash скрипт YandexDisk в своё время мне помог решить такую же задачу, нужно было обрезать незанятое пространство с образа снятого с Raspberry pi т.е с флешки. Запускаешь от root’a на вход скармливаешь ему нужный образ, короче разберёшься сам там буквально 40 строк кода.

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

спасибо за коммент, всё же задача несколько шире чем образ разобрать и потом залить на диск. Более общий подход, есть диск с различными файловыми системами, надо его скопировать целиком, но при этом не копировать «пустое место» :).

извините что изначально может быть не полностью правильно описал вопрос.

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

Ну, очевидно раз блочное устройство это непрерывная лента блоков…

Короче можно скопировать отдельно раздел с minimal boot (200МБ), а отдельно заголовок флешки, содержащий таблицу разделов. Или можно скопировать кусок с начала и с небольшим запасом после конца фактических данных. Или можно открыть некоторые редакторы разделов с поблочной разметкой и провести операции с ювелирной точностью до 1 блока (логического, 512 байт).

Читайте инструкцию к dd. По памяти dd if={откуда писать} of={куда писать} bs={размер блока, не запутаться в двоичных и десятичных приставках!} count={количество блоков в штуках}

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

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

Это называется «копирование раздела» или «копирование файловой системы». А если ты хочешь залезть в ФС и дёргать файлы оттуда, то тут да, архиватор.

kirill_rrr ★★★★★
()

Как я в итоге сделал:

  1. Снял образы всех разделов fsarchiver-ом.
  2. Снял таблицу разделов:sfdisk -d /dev/sda > partition_table
  3. Отредактировал partition_table, удалил те разделы которые не нужны, поправил размер диска, так как диск приёмник у меня меньшего размера.
  4. Залил таблицу разделов на новый диск: sfdisk /dev/sdb < partition_table
  5. залил fsarchiver-ом нужные разделы.

К чему был весь тред: к тому что в Linux потребовалось 5 шагов, хотя в каком-нибудь проприетарном ПО это просто пара кликов мышкой. Не ну я понимаю unix-way каждое ПО делает своё, но всё же копирование устройств - тема около backup-ная вроде как должно бы уже появится ПО которое делает это разом, реально был очень удивлён…

P.S. как пользоваться dd, rsync я знаю, за 20 лет читать man потихоньку приучился.

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

Странная жалоба на одну кнопку конечно. Но список данных операций я делаю в рамках одного комбайна по имени «gparted».

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

хотя в каком-нибудь проприетарном ПО это просто пара кликов мышкой

Можно было бы сделать в clonezilla, без мышки, но все равно гуй

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

Ну т.е. ты знал как сделать, но хонел кнопку «сделать мне хорошо»? Это так не работает, либо ты пишешь её себе сам, либо какая нибудь корпорация позволяет тебе пользоваться кнопкой «сделать им хорошо». Ну или юникс-вей с простым конструктором, не требующим постоянного переписывания чтобы оно хоть как то работало.

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

Снял образы всех разделов fsarchiver-ом.

Для этого есть стандартные средства для разных фс: dump/xfsdump/btrfs send/и т.д.

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

Спасибо всем кто откликнулся. Вопрос закрыт.

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