Как я могу проверить, правильно ли работает отправка / получение btrfs?

Вы не передаете никаких аргументов в свою mainфункцию. Если вы хотите, чтобы эта функция получала те же аргументы, что и в скрипте, передайте их вместе с:

main "$@"

Вместо:

main

Также относится к вашему сценарию:

5
11.06.2020, 17:16
2 ответа

У меня есть более десяти систем резервного копирования, основанных именно на последней части того, что вы сказали. Прямые каналы никогда не были для меня вариантом, так как я имею дело с резервным копированием по сети размером> 1 ТБ. Не мог рисковать потерять ни единого бита и тратить часы работы.

Моя окончательная настройка выглядит следующим образом.

Фаза начальной загрузки:

  1. Сделать первый полный снимок
  2. Отправить снимок в локальный файл (-f опция)
  3. Rsync или передача файла моментального снимка на физический носитель на удаленный сайт.
  4. Удаленное получение первого снимка

Инкрементальная фаза:

  1. Новый локальный снимок

  2. Локальное создание и отправка в файл разницы между текущим и последним снимком

  3. Повторная синхронизация с удаленным сайтом

  4. Удаленный импорт переданного файла моментального снимка

  5. Логика очистки (подумать о хранении, удалить старые снимки...)

Это работает уже 3 года. В худших случаях, когда снимки не совпадают, достаточно удалить последние два (1 локальный, 1 удаленный ), чтобы он снова работал при следующей отправке.

Удачи

3
28.04.2021, 23:25

TL;DR :Если Received UUIDи флаг readonlyустановлен, маловероятно, что что-то пошло не так, если только речь не идет о невнимательности или злом умысле.

Как @timakro уже сказал в своем ответе, Received UUIDне устанавливается, пока передача не будет завершена. Так же как и флаг readonly. Это, в сочетании с тем фактом, что каждая команда в потоке проверяется контрольной суммой (и тем, что, насколько я понимаю, отправляемые метаданные также включают контрольные суммы ), делает весьма маловероятным, что вы в конечном итоге получите поврежденный снимок на приемной стороне с установленными параметрами readonlyи Received UUID. Если какой-либо из них не установлен, btrfs откажется использовать этот снимок в качестве эталона в будущем btrfs receive.

Повреждение полученного моментального снимка может быть преднамеренным повреждением, если получен специально созданный поток, или если какой-либо процесс или пользователь изменил содержимое полученного моментального снимка во время его получения. Из справочной страницы btrfs-receive:

BUGS

btrfs receive sets the subvolume read-only after it completes successfully. However, while the receive is in progress, users who have write access to files or directories in the receiving path can add, remove, or modify files, in which case the resulting read-only subvolume will not be an exact copy of the sent subvolume.

If the intention is to create an exact copy, the receiving path should be protected from access by users until the receive operation has completed and the subvolume is set to read-only.

Additionally, receive does not currently do a very good job of validating that an incremental send stream actually makes sense, and it is thus possible for a specially crafted send stream to create a subvolume with reflinks to arbitrary files in the same filesystem. Because of this, users are advised to not use btrfs receive on send streams from untrusted sources, and to protect trusted streams when sending them across untrusted networks.

Также стоит отметить, что можно отключить флаг readonlyдля подтома, изменить что-то, а затем снова включить его. Если это было сделано с любой стороны, все гарантии выбрасываются в окно.

Обратите внимание, что передача вывода в файл и передача этого файла не обеспечивает какую-либо защиту от вышеуказанного. Лично я не вижу абсолютно никаких причин, по которым было бы небезопасно передавать вывод btrfs sendнапрямую в ssh. Преимущество промежуточного хранения потока в файлах состоит в том, что это позволяет возобновить прерванную передачу при ненадежном соединении, но не дает никаких гарантий целостности данных.

Хороший (, хотя и не дурацкий -способ доказательства )того, что полученный снимок совпадает с отправленным, заключается в использовании rsync -avcn --del path/to/sent/snapshot/ user@remote:path/to/received/snapshot/.

2
03.06.2021, 09:15

Теги

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