1

Я искал информацию о том, как сжать / изменить размер - или непосредственно dd - флэш-накопитель USB 32 ГБ, который я сделал для Raspberry Pi, в файл img 2G. Я изменил размеры разделов, есть один с Win32 FAT 64M, а раздел Linux - 2048Mb (2G), и все, что мне нужно, это просто файл dd IMG размером около 2G.

Я знаю, что есть метод сжатия Gzip, но после распаковки он распакует img-файл объемом 32 ГБ, а иногда у меня не так много места. Я просто хочу иметь возможность записать файл на флэш-накопитель USB емкостью 2 ГБ без использования файла 32 ГБ, в котором используется только 2 ГБ. Возьми?

Кроме того, я использую SSD, и я прочитал, что /dev/zero -ing файл изображения является довольно опасным, поэтому я надеюсь, что есть более простой способ сделать это. У меня есть Linux и Windows в моем распоряжении, так что я рад услышать предложения!

Обновление: К сожалению, я допустил ошибку и заменил флешку на другую, но у меня есть весь файл img, который я только что смонтировал в /dev/loop0 и запустил fdisk -l , вот вывод:

Disk flashrom32g.img: 29.8 GiB, 32010928128 bytes, 62521344 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xaebebc78

Device           Boot  Start     End Sectors Size Id Type
flashrom32g.img1        8192  137215  129024  63M  c W95 FAT32 (LBA)
flashrom32g.img2      137216 4331519 4194304   2G 83 Linux

1 ответ1

1

Соответствующая часть вашего USB-ключа занимает ровно 4331520 секторов по 512 байт (пронумерованных от 0 до 4331519), поэтому команда должна быть:

dd if=/dev/your_usb_key of=/path/to/image.dd bs=512 count=4331520

Редактировать (чтобы ответить на комментарий):

а зачем 4331520 если это 4331519? +1 только по причинам?

Если бы сектора были пронумерованы от 1 а последним был 4331519 й, то их было бы всего 4331519 . Но, как я уже сказал, они пронумерованы от 0 , поэтому count=4331520 .

Я чувствую себя неловко с такими вычислениями, разве нет автоматического способа сделать это?

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

что-то вроде DD, но лишить пустого / неразделенного пространства?

Вы не хотите удалять все неразмеченное пространство. В секторе 0 есть MBR с таблицей разделов. Ваши сектора 1..8191 могут содержать код загрузчика.

Если бы существовал GPT, в самом конце диска была бы резервная таблица разделов, и она также была бы в неразделенном пространстве.

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

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

В общем, вы всегда можете создать отдельные образы MBR (или MBR + загрузчик) и каждого отдельного раздела. В вашем случае это будет примерно так:

dd if=/dev/your_usb_key of=/path/to/image_MBR_bootloader.dd bs=512 count=8192
dd if=/dev/your_usb_key1 of=/path/to/partition1.dd
dd if=/dev/your_usb_key2 of=/path/to/partition2.dd

Если вы хотите убрать пустое пространство (то есть пространство, показанное df), вам следует использовать инструмент, который понимает файловую систему и работает на уровне файлов, а не секторов диска. Я уверен, что dd (или что-то вроде dd) не подходит для такой работы.

Как я могу быть уверен, что это сработает, не помещая его в реальный диск для проверки?

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .