dd резервное копирование raspberry pi через ssh со сжатием gzip

В потоке systemd -devel «Ошибочное обнаружение деградированного массива» говорится о состоянии гонки между udev и таймером/службой mdadm -последней -инстанции. Затем строка Conflicts=sys-devices-virtual-block-%i.deviceзапускает размонтирование ранее смонтированной файловой системы.

В теме также упоминается обходной путь , который также должен решить вашу проблему :заменить строку Conflicts=...на строку ConditionPathExissts=...:

# cp /usr/lib/systemd/system/mdadm-last-resort@.* /etc/systemd/system/
# sed -i 's@^Conflicts=sys-devices-virtual-block-%i.device@ConditionPathExists=/sys/devices/virtual/block/%i@' \
    /etc/systemd/system/mdadm-last-resort@.*
# shutdown -r now

Обратите внимание, что замена -через/etc/systemd/system/.../override.confне работает для удаления строки Conflicts=.

Вы можете подписаться на связанную вышестоящую проблему systemd. Нужна однонаправленная -версия «Конфликтов» , чтобы получать уведомления об изменениях, касающихся основной проблемы.

См. также мой отчет об ошибке Fedora 27 , где эта проблема проявляется в том, что /boot/efiне монтируется при размещении на зеркале RAID -1.

3
11.01.2020, 21:59
2 ответа

«Холодное» резервное копирование намного безопаснее, чем «живое».

На работающем PI выполните следующую команду

dd if=/dev/zero of=/tmp/zero bs=8M; rm /tmp/zero

Он будет записывать нули во все свободное пространство, что даст высокую степень сжатия. затем поместите microSD raspberry pi в другую систему, например, на рабочий стол с Ubuntu, и запустите

fdisk -l

Я вижу microSD как /dev/sdb, тогда следующая команда сожмет всю SD с помощью:

gzip -c /dev/sdb > /backup/raspberry-pi.gz

Для восстановления выполните эту команду:

gzip -cd /backup/raspberry-pi.gz > /dev/sdb

Прежде чем приступать к описанной выше процедуре, рекомендуется сделать полную резервную копию.

4
27.01.2020, 21:13

Как указано в комментариях, у вас есть несколько вариантов уровня файловой системы -для резервного копирования Pi. Если вы сделаете это, вам нужно будет исключить виртуальные файловые системы /procи /sys. Вы также должны знать, что он не будет включать загрузочный образ файловой системы, отличный от -, или вашу таблицу разделов; В конце этого ответа я дам предложение по резервному копированию отдельно.

  1. Вы можете использовать rsync. Это даст вам копию файловой системы на вашем резервном носителе, а не один файл изображения.

    rsync -avzHP --exclude '/proc/' --exclude '/sys/' root@pi:/ /backup/pi.$(date +'%Y%m%d')
    

    Если ваша локальная учетная запись не является root, вы, вероятно, захотите включить параметр --fake-superдля резервного копирования и восстановления. (Он сохраняет сведения об удаленном владении, хотя не может фактически применить их к локальной резервной копии.)

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

  2. Вы можете использовать tar, paxили любой другой инструмент архивации. Это даст вам сжатое изображение

    .
    ssh root@pi 'cd / && tar --exclude '/proc/' --exclude '/sys/' -czvf -.' > /path/to/backup.pi.$(date +'%Y%m%d').tgz
    
  3. Вы можете использовать другие параметры, такие как duplicity. Я не использовал это серьезно, поэтому я не думаю, что лучше всего могу привести пример того, как это будет использоваться.


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

На моем Pi у нас есть такая структура (Я проигнорировал третий раздел; он может быть у вас, но он, вероятно, был зарезервирован как часть вашей файловой системы):

fdisk -l /dev/mmcblk0
Disk /dev/mmcblk0: 29.7 GiB, 31914983424 bytes, 62333952 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: 0x42913321

Device         Boot   Start      End  Sectors  Size Id Type
/dev/mmcblk0p1         8192   137215   129024   63M  c W95 FAT32 (LBA)
/dev/mmcblk0p2       137216  8388607  8251392    4G 83 Linux

Вам нужно все от начала диска до начала раздела 1(/boot). В этом конкретном отображении сектора находятся в блоках по 512 байт, но нам нужно прочитать блоки по 4 КБ (размер блока SSD ), поэтому мы делим все числа на восемь:

# Copy the boot segment from the beginning of the disk
dd bs=4k count=$((8192/8)) if=/dev/mmcblk0 | gzip >img0.gz

Вы можете восстановить этот сохраненный сегмент на карту SSD в /dev/mmbclk0с помощью такой команды. Обратите внимание, что это безвозвратно перезапишет целевое устройство,поэтому проверьте его несколько раз, прежде чем использовать, и не копируйте слепо этот пример:

zcat img0.gz | dd bs=4k iflag=fullblock of=/dev/mmcblk0
partprobe /dev/mmcblk0
2
27.01.2020, 21:13

Теги

Похожие вопросы