Что мне нужно, чтобы иметь постоянное зеркалирование всего жесткого диска ноутбука в файл на внешнем жестком диске USB. Иногда внешний диск может быть отключен.
Я использую Ubuntu Linux.
Вы можете настроить зеркало, которое будет хранить копию всех данных на втором диске.
Если ваши диски имеют одинаковый размер, используйте:
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda /dev/sdb
(Assumign sda - ваш первый диск, а sdb - второй (USB) диск)
Если они не одинакового размера, вы можете сделать то же самое с разделом:
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
(Обратите внимание на дополнительную букву).
Если вы загрузитесь с отсутствующим USB-накопителем, mdadm будет жаловаться на то, что зеркало находится в ухудшенном состоянии, но вы все равно можете его использовать. Когда вы подключаете диск, он может быть повторно синхронизирован.
[Редактировать] Как указано в комментарии, я действительно пропустил «резервное копирование в файл на внешнем диске»
Вы можете создать файл на внешнем диске, используя dd. Например, для файла объемом 30 ГБ используйте dd if=/dev/zero of=/mnt/my_usb_drive/my_backupfile bs=1M count=30*1024
. Затем используйте loopback для монтирования этого файла в качестве блочного устройства и запуска mdadm над вновь созданным блочным устройством.
Недостатком этого является то, что вам придется добавить некоторые правила «горячей» замены, которые определяют, когда подключен USB-накопитель, проверяют, является ли он правильным диском, и, если это правильный диск, а не другой USB-накопитель, запустите сценарий, чтобы запустить петлевое крепление и повторная синхронизация.
Все это технически возможно, но простой дамп файловой системы или rsync в каталог на USB-диске, вероятно, является гораздо лучшим решением.
Я на самом деле сделал это совершенно по-другому, используя DRBD (протокол A). Это позволило мне подключать и отключать USB-накопитель без необходимости повторной синхронизации всего устройства и увеличивало скорость записи на мой внутренний SSD. Мое решение - http://www.my.host.net.nz/blog/2012/09/on-demand-raid-for-laptop-with-ssd-and-usb-disk/
Некоторые подсказки, связанные с проблемой:
blockdev --getsize64 /dev/sda
dd if=/dev/zero of=/mnt/external_usb_drive/sda.mirror bs=1 count=0 seek=500107862016
mknod -m640 /dev/loop_sda_mirror b 7 8
(номера MAJOR
и MINOR
, которые в данном примере равны 7 и 8, вы должны получить соответственно для других устройств loopdack (запустите ls -al /dev/loop*
для смотреть значения по умолчанию))losetup /dev/loop_sda_mirror /mnt/external_usb_drive/sda.mirror
Тогда посмотри другой ответ.