Что именно делает скраб btrfs? Согласно странице руководства, которая совершенно неясна, она выполняет некоторую проверку ошибок. Что за проверка ошибок? Насколько это надежно? Это может восстановить некоторые ошибки? Как это работает? Работает ли он на каждом диске btrfs?
19
Ответы:
Я не знаю, делает ли он что-нибудь еще, но я знаю, что как минимум,
btrfs scrub
выполняется очистка данных на полном диске. По сути, он считывает все данные * на диске, пересчитывает свою контрольную сумму и сравнивает пересчитанную контрольную сумму с сохраненной. Когда сохраненные и пересчитанные контрольные суммы не совпадают, система знает, что существует повреждение.После обнаружения повреждения поведение зависит от настроек вашего диска. Например, если у вас есть RAID 1 (зеркальное отображение), вы
btrfs scrub
можете исправить поврежденные данные, скопировав не поврежденную версию с другого диска. Если все копии некоторых данных повреждены (например, повреждение нескольких дисков или, во-первых, отсутствие избыточных копий), то мало чтоbtrfs scrub
можно сделать, кроме как предупредить вас.Это важно по той причине, что жесткие диски надежны на чтение и запись только на 99.999999999999%. Таким образом, каждые несколько терабайт данных ввода-вывода, вероятно, будет ошибка. Хотя ошибки могут быть и обнаруживаются (и исправляются, предполагая, что избыточная копия все еще действительна) во время обычного доступа к диску, обычная полная очистка диска может находить и исправлять ошибки до того, как накопится достаточное количество данных, что все копии одних и тех же данных будут повреждены.
* Я использую «данные» вместо «файл», чтобы включить метаданные. Btrfs хранит файлы и соответствующие метаданные (включая контрольные суммы) в блоках данных, все из которых проверяются и проверяются
btrfs scrub
.Смотрите также:
источник
100-1/10^14
имеет 16 девяток, а у поста только 14 (что соответствует 10 ^ 12).1-10^n
, что затем конвертируется в проценты, потому что людям не нравятся десятичные дроби. Кроме того, я не упомянул в своем предыдущем комментарии, что диски находятся в RAID 1 (следовательно, на каждом из них находятся те же данные по 270-300 ГБ), что исправляет еще одну очевидную ошибку вычисления.В продолжение превосходного ответа Марка Хаферкампа,
btrfs scrub
чтение всех данных, а не всех файлов, является критически важным свойством и фактически делает его таким полезным. Помните, что btrfs имеет встроенную поддержку RAID. Допустим, у вас есть файловая система btrfs, охватывающая два диска, которые вы настроили для использования RAID1. В этом случае при записи в файл эта запись реплицируется на оба диска. (С более сложным примером все усложняется, но в этом простом случае это всегда так.) Однако, когда вы читаете из этого файла, чтение попадет только на один диск (потому что чтение файла дважды если только первая копия не может быть использована по какой-либо причине).Теперь скажите, что ваш второй диск btrfs ухудшается и начинает повреждать данные в вашей файловой системе. Когда вы читаете блоки с этого диска, btrfs заметит, что контрольная сумма не совпадает, и восстановит внутреннюю полосу из заведомо исправной копии - копии на первом диске. Он вернет данные в приложение, вызывающее
read()
(или что-то еще), как будто ничего не произошло.Но что, если btrfs не решит читать со второго диска? Помните, что есть две копии, поэтому он может читать с первого или второго диска. Если он читает с первого диска, он не заметит ничего плохого. Единственный раз, когда он заметит, что что-то не так, это когда первый диск тоже деградирует. Теперь вы действительно в восторге, так как уже слишком поздно восстанавливать данные - копия второго диска некоторое время была повреждена, а первая копия (то, что вы использовали бы для восстановления второго диска) теперь тоже повреждена!
Вот где
btrfs scrub
приходит. Он читает все данные , а не все файлы. Это включает в себя метаданные, а также вторичные копии файлов, которые обычно не находятся в пути чтения. Когда он читает эти вторичные копии, это дает возможность внутриполосному исправлению ошибок btrfs включить и восстановить данные из избыточной копии.источник