Дзеркало / резервне копіювання ноутбука btrfs на інколи підключений зовнішній диск USB


6

У мене ноутбук із внутрішнім накопичувачем за допомогою Btrfs . Тут є кілька підтомників та знімків. Я хочу, щоб копія цього диска періодично робилася на зовнішній USB-диск приблизно однакового розміру. Зовнішній накопичувач повинен бути завантажувальним і досить близьким до внутрішнього, так що якщо основний привід вийшов з ладу, я можу просто поміняти його.

Який найкращий спосіб досягти цього?

Нижче розглянуто кілька методів:

Я розглядав можливість використання Btrfs RAID 1, але це дійсно розроблено для постійного підключення накопичувача, тому я підозрюю, що він не працюватиме добре.

Коли у мене був один і той же диск і я використовував Ext4 на обох, я керував цією установкою за допомогою Rysnc, який добре працював. Я думаю, що це не спрацює, хоча зараз rsync не зрозуміє знімків і копіює все багато разів.

Можливо, використання Btrfs відправлення / отримання може бути змушене працювати, але це не так просто, тому що для того, щоб надіслати файлову систему, спочатку потрібно зробити знімок лише для читання, а потім на цьому зовнішньому диску використовується назва цього знімка. Я не думаю, що існує спосіб отримати кореневу файлову систему за адресою /

Відповіді:


3

Можливо, використання Btrfs відправлення / отримання може бути змушене працювати, але це не так просто, тому що для того, щоб надіслати файлову систему, спочатку потрібно зробити знімок лише для читання, а потім на цьому зовнішньому диску використовується назва цього знімка. Я не думаю, що існує спосіб отримати кореневу файлову систему за адресою /

Це найкраще рішення. Я використовую знімки, щоб робити швидкі додаткові резервні копії моїх серверів. Ви можете створити резервну копію кореневого підтомника так само, як і будь-який інший, але я не думаю, що ви можете отримати його в корені. Більш того, ви не повинні робити цього, оскільки це заважає вам насолоджуватися однією з переваг знімка: покрокові резервні копії. Зроблено належним чином, він надсилатиме лише дані, які були змінені, та використовує лише дисковий простір для змінених даних.

Цей скрипт працює як робота з хроном і робить щоденний знімок мого кореневого розділу, а потім використовує btrfs sendдля надсилання додаткової копії на мій резервний розділ. Сценарій використовується як письмове використання pv, але якщо ви з якоїсь причини не хочете його встановлювати, його можна просто вийняти pvз середини труб.

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
date=$(date +%Y-%m-%d)

# the path to the partition mount point that we are backing up
source_partition=/

# where backup snapshots will be stored on the local partition
# this is needed for incremental backups
source_snapshot_dir=/snapshots

# where backups will be stored on the backup drive
target_snapshot_dir=/mnt/media/backups/root

if [ ! -d $source_snapshot_dir ]; then
    echo 'Creating initial snapshot...'
    mkdir --parents $source_snapshot_dir $target_snapshot_dir

    # create a read-only snapshot on the local disk
    btrfs subvolume snapshot -r $source_partition $source_snapshot_dir/$date

    # clone the snapshot as a new subvolume on the backup drive
    # you could also pipe this through ssh to back up to a remote machine
    btrfs send $source_snapshot_dir/$date | pv | \
        btrfs receive $target_snapshot_dir
elif [ ! -d $source_snapshot_dir/$date ]; then
    echo 'Creating root volume snapshot...'

    # create a read-only snapshot on the local disk
    btrfs subvolume snapshot -r $source_partition $source_snapshot_dir/$date

    # get the most recent snapshot
    previous=$(ls --directory $source_snapshot_dir/* | tail -n 1)

    # send (and store) only the changes since the last snapshot
    btrfs send -p $previous $source_snapshot_dir/$date | pv | \
        btrfs receive $target_snapshot_dir
fi

echo 'Cleaning up...'

# keep the 3 most recent snapshots on the source partition
ls --directory $source_snapshot_dir/* | \
    head --lines=-3 | \
    xargs --no-run-if-empty --verbose \
    btrfs subvolume delete --commit-after

# keep the 28 most recent snapshots on the backup partition
ls --directory $target_snapshot_dir/* | \
    head --lines=-28 | \
    xargs --no-run-if-empty --verbose \
    btrfs subvolume delete --commit-after

(Примітка. Я дещо адаптував скрипт, щоб перетворити його на загальне рішення, і не перевірив його як написаний. Будь ласка, не соромтесь надсилати зміни, якщо це необхідно.)


-1

Як я розумію, ви хочете створити дзеркало (або достатньо близько до одного) жорсткого диска ноутбука, щоб замінити жорсткий диск ноутбука у разі відмови диска. Дзеркальний привід повинен бути підключений через USB, і він не завжди може бути підключений, наприклад, ви берете ноутбук у коротку поїздку, але залишаєте дзеркальний диск на роботі чи вдома.

Для мене це виглядає як випадок для RAID 1. Це можна зробити або за допомогою BTRFS, або MDADM. У будь-якому випадку під час підключення зовнішнього накопичувача до ноутбука, вам потрібно буде переконатися, що він сприймається як "підлеглий". Оскільки новіші записи, швидше за все, траплялися б на ноутбуці, це має бути так. У btrfs можна було виконати операцію scrub (btrfs-scrub).

Крім того, ви можете використовувати fssync, хоч і надано, ви будете ssh'ing у localhost. Fssync повідомляється зі сторінки man, щоб добре працювати з btrfs.

Що стосується знімків та використання rsync чи іншої подібної синхронізації, ви можете створювати знімки, створюючи їх як на зовнішньому дзеркалі, так і на внутрішньому диску, а також не синхронізувати знімки, припускаючи знімки лише для читання. Якщо це не лише читання, вам потрібно буде синхронізуватись і потенційно виникне проблема, яку ви вказали.

Якщо у вас інша система, ви можете розглянути можливість використання DRBD в режимі одиночного основного режиму. Хоча, можливо, ви зможете змусити це працювати з обома накопичувачами в одній системі, я бачив звіти, які вказують, що це не працює.

Зауважте, що RAID, синхронізація та реплікація багатьма вважаються непридатною заміною резервної системи.


"Для мене це виглядає як випадок для RAID 1." Це не так. RAID призначений для того, коли всі диски завжди підключені, за винятком випадків виходу з ладу. "Зауважте, що RAID, синхронізація та реплікація багатьма вважаються непридатною заміною системи резервного копіювання." Це правильно. RAID - це не резервне копіювання. Він захищає вас від певних видів пошкоджень, але не дозволяйте його зручності втягнути вас у помилкове почуття безпеки.
Міккель
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.