Изменить порядок секторов на блочном устройстве?

Я рассматриваю возможность резервного копирования некоторых данных на DVD /BD. (Я знаю о DVDisaster.) Я где-то читал, что внешние секторы на DVD более подвержены износу, чем внутренние. Это говорит о том, что со временем блоки во второй половине изображения с большей вероятностью будут повреждены, чем блоки в первой половине. Итак, мой вопрос, есть ли способ записать те же данные на 2 образа DVD, так что

  1. можно смонтировать любой DVD, возможно, в 2 этапа (например, смонтировать ISO-файл, хранящийся на DVD), но без предварительного копирования всего на HD и манипулирования им
  2. основные данные должны быть записаны на 2 DVD в существенно различном порядке

Если мне неясно, вот что может быть возможным решением.

Предположим, на секунду существует драйвер Linux, который может смонтировать ISO-образ в обратном направлении. Итак, я даю ему iso-файл, и когда ему нужен 1-й сектор, он читает последние 2048 байт файла в обратном порядке вместо первых 2048 байт в обычном порядке. Я не знаю, существует ли такой драйвер, но если бы он существовал, это было бы одним из решений моей проблемы, потому что я мог бы сделать это: поместить мои данные в iso-образ; вычислить второе изображение как первое в обратном направлении; инкапсулировать каждое изображение в простую файловую систему UDF с одним файлом; записать две файловые системы UDF на разные DVD. Теперь, когда я подключаю любой DVD, я могу просто смонтировать один iso-файл, чтобы вернуть мои данные. Кроме того, данные будут записываться на 2 DVD-диска по-разному, поэтому, если оба DVD-диска потеряют последние 1/3 своих секторов, я все равно смогу восстановить их все (вручную, но это было бы возможно).

Другими возможными решениями будет общий драйвер для перестановки / поворота / переупорядочения блоков произвольного размера в устройстве произвольного блока. Или, возможно, есть способ сохранить файл в файловой системе UDF, используя определенный порядок секторов? Учитывая, что UDF является полноценной файловой системой, это определенно возможно, но есть ли инструмент для этого?

Спасибо!!

Изменить: как я объяснил в первом ответе, я не имею в виду заменить DVDisaster, но дополнить его. Рассмотрим 2 стратегии резервного копирования 4G данных. Стратегия A: используйте 2 идентичных DVD, каждый с 15% ecc от DVDisaster. Стратегия B: использовать 2 DVD, каждый с 15% ecc, но с дополнительной перестановкой, о которой я упоминал выше (на 1 из 2 DVD). Я утверждаю, что из-за закономерностей износа DVD-дисков (в частности, из-за корреляции ошибок), через некоторое время вероятность полного восстановления от B значительно больше, чем от A (при прочих равных условиях).

Edit2: Чтобы подтвердить мое утверждение о том, что DVDisaster не является лекарством от всего, вот сценарий, демонстрирующий, как DVDisaster с 33% ECC-данными переносит потерю данных только с 1,3% повреждением. Очевидное противоречие состоит в том, что 33% относятся только к коррупции "в лучшем случае", а не к "любой" коррупции. К вашему сведению, я создаю файл, охватывающий всю файловую систему в test.1.udf, изменяя только последний сектор в файле на ноль в test.2.udfвычисление данных ecc для обоих и сравнение секторов, включая данные ecc. Дело в том, что если test.1.udf ваши данные, и вы теряете сектора, которые отличаются и только те, вы не можете восстановить test.1.udf так как test.2.udf это еще одна возможность.

n_blocks=8192
tdir=$(mktemp -d)
mkudffs -b 2048 test.1.udf $n_blocks
sudo mount test.1.udf $tdir -o bs=2048
sudo chown $USER.$USER $tdir
n=$(df -B 2K $tdir | tail -n 1 | awk '{print $4}')
let n-=1
dd if=/dev/urandom of=$tdir/file bs=2K count=$n 2>/dev/null
last=$(od <$tdir/file -Ad -t x1 | tail -n 2 | head -n 1 | cut -d ' ' -f 2-)
sudo umount $tdir
start_of_last_block=$(od <test.1.udf -Ad -t x1 | grep -A 1 "$last" | tail -n 1 | awk '{print $1}')
last_block=$(($start_of_last_block / 2048))
dd if=test.1.udf bs=2K count=$(($last_block - 1)) >test.2.udf 2>/dev/null
dd if=/dev/zero bs=2K count=1 >>test.2.udf 2>/dev/null
dd if=test.1.udf bs=2K skip=$last_block count=$(($n_blocks - $last_block)) >>test.2.udf 2>/dev/null
n_blocks_with_ecc=$(echo "$n_blocks * 133 / 100" | bc)
echo "add dvdisaster ecc data, using in total $n_blocks_with_ecc"
#run dvdisaster on the 2 files, then...
n_blocks_different=$(for i in $(seq 0 $(($n_blocks_with_ecc - 1))); do
  if [ $((($i / 100) * 100)) -eq $i ]; then
    echo "$i..." >&2
  fi
  diff -q <(dd if=test.1.udf bs=2K skip=$i count=1 2>/dev/null) \
      <(dd if=test.2.udf bs=2K skip=$i count=1 2>/dev/null) >/dev/null || echo $i
done | wc -l)
echo "number of blocks different: $n_blocks_different / $n_blocks_with_ecc ($(echo "scale=6; $n_blocks_different / $n_blocks_with_ecc * 100" | bc)%)"

Выход:

number of blocks different: 145 / 10895 (1.330800%)

1 ответ

Проблема, которую вы описываете, уже имеет более элегантное и эффективное решение: исправление ошибок Рида-Соломона. Это работает путем вставки кода с исправлением ошибок в конец диска, так что вы можете потерять определенное количество данных из произвольных расположений на одном диске и при этом восстановить весь файл.

Это возможно, потому что декодер RS не различает пользовательские данные и данные исправления ошибок. В представлении декодера RS каждый блок представляет собой последовательность из 100 байтов, из которой может быть восстановлено произвольное подмножество из 20 байтов.

Хотя некоторые части диска могут с большей вероятностью потерять данные, потеря данных все же может происходить в любом месте. В описанном двухдисковом методе вы потеряете данные, если два сбойных сектора будут перекрываться. На более высоких уровнях потери данных это будет довольно распространенным явлением. Для сравнения, коррекция ошибок Рида-Соломона позволяет восстановить без потери 14,3% (нормальный режим) или 33,5% (высокий режим) диска.

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

Счастливые резервные копии!

введите описание здесь

Другие вопросы по тегам