RAID1 vs rsync - безопасность?

Если вы используете bash, вы можете сделать что-то вроде этого (с дополнительными echo операторами, чтобы показать, что происходит на каждом этапе):

$ line=dog,/path1,/path2

$ newline=$(printf "%s\n" "$line" | 
            perl -n -e 'BEGIN {$count=1};
                        my ($var,@values) = split /,/;
                        print "$var=" . join(",",@values);
                        foreach (@values) {
                            printf "%s%i=\"%s\" ",$var, $count++, $_
                        }')

$ echo "$newline"
dog=/path1,/path2 dog1=/path1 dog2=/path2

$ declare $newline

$ declare | grep '^dog'
dog=/path1,/path2
dog1=/path1
dog2=/path2

Это использует perl для разделения $line запятыми. Первое поле сохраняется в $var, остальные - в массиве @values. Затем он производит вывод, пригодный для использования с командой bash declare для установки переменных.

Обратите внимание, что $newline в строке declare не заключается и не должен заключаться в двойные кавычки. Если она будет заключена в двойные кавычки, declare получит только один аргумент, а не три, разделенные пробелами.

Одним из неприятных побочных эффектов отсутствия кавычек здесь является то, что declare WILL не работает, если любое из значений поля содержит пробелы и т.д. Например, line=dog,/path /with / spaces,/path2. При необходимости это можно исправить, выводя соответствующие цитаты из операторов print и printf в скрипте perl. И/или определив $newline как массив bash вместо строки. Оставим это упражнение для читателя, так как я уже достаточно показал принцип/технику, используемую здесь.

Если вы хотите объявить их как экспортируемые переменные, используйте:

declare -x $newline

подробнее см. в help declare.

BTW, в ksh вы можете использовать typeset вместо declare. typeset также поддерживается bash, но считается устаревшим (см. help typeset в bash).


И наконец: вы уверены, что не предпочли бы использовать переменную массива shell (например, dog[0]=/path1,/path2, dog[1]=/path1, и dog[2]=/path2), а не отдельные переменные? Именно для таких вещей они и существуют.

3
20.04.2016, 16:35
2 ответа

Мой личный фаворит:

  • создать Raid1 Software Raid (mdadm)
  • сделать регулярное инкрементное резервное копирование
  • сделать еженедельное полное резервное копирование.

Программный raid1 защищает вас от сетевых сбоев, так что том ВСЕГДА активен, пока один диск в порядке. Программный raid автоматически синхронизирует содержимое между дисками, поэтому у вас всегда есть актуальные данные. Получить данные с диска несложно, поскольку raid1 является зеркалом. Тем не менее, вам необходимо как можно скорее заменить неисправный диск.

Резервные копии защищают вас от ошибок «уп-и-удалил-важный-файл».

Помните: если данные не копируются, это не важно ...

4
27.01.2020, 21:11

RAID1 уничтожит все, если вы сделаете ошибку или вирус решит уничтожить ваши файлы.
Но это позволяет легко исправить фактические сбои жесткого диска.

rsync вызовет простои в (очень частом) случае, когда ваш основной жесткий диск выходит из строя, потому что вам нужно перенести данные обратно (или, по крайней мере, заменить диски).
Но это упрощает восстановление после проблем, вызванных программным обеспечением.

Для «обычного» домашнего использования я бы всегда использовал rsync или другое решение для резервного копирования, в основном потому, что вы обычно не хотите тратить деньги на три жестких диска (один из которых доступен по сети), все с такое же содержание на нем.
Во всем остальном, конечно, правильный ответ: и то, и другое!

4
27.01.2020, 21:11

Теги

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