В Linux мы можем сделать
dd if=/dev/sdb of=bckup.img
но если диск имеет 32 ГБ и используется только 4 ГБ, файл образа 32 ГБ - пустая трата времени. Есть ли способ или инструмент для создания изображений только с достоверными данными?
В Linux мы можем сделать
dd if=/dev/sdb of=bckup.img
но если диск имеет 32 ГБ и используется только 4 ГБ, файл образа 32 ГБ - пустая трата времени. Есть ли способ или инструмент для создания изображений только с достоверными данными?
Лучшее, что можно сделать, это
Скопируйте все файлы со всех разделов, сохраняя метаданные
mkdir -p myimage/partition1
mkdir myimage/partition2
sudo cp -Rrf --preserve=all /media/mount_point_partition1/* myimage/partition1/
sudo cp -Rrf --preserve=all /media/mount_point_partition2/* myimage/partition2/
Извлеките MBR
sudo dd if=/dev/sdX of=myimage/mbr.img bs=446 count=1
замените /dev/sdX
на соответствующее устройство.
Разбейте целевой диск на разделы с размерами, превышающими скопированные данные, и должны иметь тот же формат и те же флаги, используя gparted
. Google, как разбить диск.
Смонтируйте только что отформатированный и размеченный диск. На большинстве компьютеров вам просто нужно подключить диск, и вы можете найти смонтированные разделы в папке /media
.
Скопируйте ранее скопированные данные в разделы назначения, используя следующие команды
sudo cp -Rrf --preserve=all myimage/partition1/* /media/mount_point_partition1/
sudo cp -Rrf --preserve=all myimage/partition2/* /media/mount_point_partition2/
Скопируйте обратно MBR
sudo dd if=myimage/mbr.img of=/dev/sdX bs=446 count=1
Теперь наслаждайтесь новым диском!
Довольно хороший и простой способ справиться с этим - просто передать его через gzip, что-то вроде этого:
# dd if=/dev/sdb | gzip > backup.img.gz
Таким образом ваше изображение будет сжато, и, скорее всего, неиспользуемое пространство будет сжато почти до нуля.
Вы бы использовали это для восстановления такого изображения:
# cat backup.img.gz | gunzip | dd of=/dev/sdb
Одно замечание: если у вас было много файлов, которые были недавно удалены, размер изображения может быть по-прежнему значительным (удаление файла необязательно обнуляет базовые сектора). Вы можете стереть свободное пространство, создав и сразу удалив большой файл, содержащий нули:
# cd /media/flashdrive
# dd if=/dev/zero of=bigfile bs=1M # let it run and quit by disk full error
# rm bigfile
Используя параметры bs и count dd
, вы можете ограничить размер изображения, как показано на шаге 2 answer 1665017.
Возможно, вы уже знаете, какой размер изображения вы хотите создать. Если нет, вы можете получить хорошую идею от df
:
df -H --total /
Замените /
на список разделенных пробелами всех точек монтирования, относящихся к разделам диска.
Более точный способ - использовать fdisk
или ваш предпочтительный редактор разделов и заняться калькулятором.
$ fdisk -l /dev/mmcblk0
Disk /dev/mmcblk0: 7.4 GiB, 7948206080 bytes, 15523840 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: 0x00057540
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 2048 186367 184320 90M c W95 FAT32 (LBA)
/dev/mmcblk0p2 186368 3667967 3481600 1.7G 5 Extended
/dev/mmcblk0p5 188416 3667967 3479552 1.7G 83 Linux
Общее используемое пространство в байтах = конечный сектор последнего раздела сектора сектора X (здесь 3667967 x 512).
Общее используемое пространство в GB = общее используемое пространство в байтах /1024 3 (здесь 1,749023 ГБ).
Если вы решите, например, что ваше изображение должно быть ровно 2 ГБ, следующая команда сделает это:
dd if=/dev/mmcblk0 of=/path/to/pi_updated.img bs=1M count=2048
Результирующее изображение также будет включать в себя случайный шум, выходящий за пределы максимального раздела последнего раздела.
Не забывайте sudo
приведенные выше команды, если ваша учетная запись еще не имеет достаточных привилегий.
Для моих целей мне не нужно изображение, которое отлично подрезано до последнего бит данных, поэтому, когда реальный размер составляет 1,75 ГБ, для меня достаточно 2 ГБ изображения. Это вырезает другие 6 ГБ (или 30 ГБ или что-то еще, что у него есть) неиспользуемого пространства, которое в противном случае было бы на изображении.
Я видел советы во многих местах, что dd
должен не выполняться на смонтированном разделе, и я следовал этому, потому что он кажется интуитивно правильным; это похоже на попытку набросать эскиз в зеркало с эскизом, который вы делаете, также видимым в эскизе. Это немного отрывочно.
Если у вас большая SD-карта 16 ГБ, 32 ГБ и т.д., Но вы хотите сэкономить место с помощью резервной копии, вы можете использовать:
sudo apt-get install gnome-disk-utility
Откройте утилиту диска, чтобы проверить, действительно ли ваш usb-накопитель содержит:
gnome-disks
В моем случае SD-карта объемом 32 ГБ с изображением Распбиана, распознаваемая как: /dev/sde
Поэтому я бегу с /dev/sde
:
sudo dd bs=4M status=progress if=/dev/sde | gzip > \
/you-selected-full-path-here/raspberry-images/'date +%Y%m%d'_rpi_image_backup.gz
status=progress gives you progress bar indication
| gzip > compresses the 32 GB total size and not writing the empty space from the 32 GB
'date +%Y%m%d' writes today date in the filename
Вывод: 20190529_rpi_image_backup.gz
И размер составляет всего 3,5 ГБ. Если вы хотите записать это изображение на новую SD-карту, используйте:
Также вы можете записать этот образ, сделанный из 32 ГБ, на диск 16 ГБ или 8 ГБ, это не будет жалобой на то, что изображение больше не будет слишком большим.
Попробовав несколько разных методов, я нашел следующую статью:
https://medium.com/platformer-blog/creating-a-custom-raspbian-os-image-for-production-3fcb43ff3630
Он создан для сжатия и изменения размера (при первой загрузке) образа raspberry-pi, но его можно легко настроить для любого другого дистрибутива Linux. Я успешно установил работу с Debian 9 на чипе, основанном на собственном оружии.
rc.local
, созданный сценарием pishrink, сначала использует raspi-config
для изменения размера rootfs, а затем возвращается к методу, использующему parted
(который мне пришлось заранее установить на моей машине). Я закомментировал раздел кода, где raspi-config
.
Образ моей SD-карты сократился с 15 до 1,1 ГБ. Я высветил уменьшенное изображение SD-карты с помощью etcher. Потребовалось менее 5 минут, а не более получаса для полного образа объемом 15 ГБ.