LINUX.ORG.RU

История изменений

Исправление intelfx, (текущая версия) :

Здесь речь о том, чтобы сделать fsck, когда метаданные на в блоке, который не читается с девайса (стабильно возвращается ошибка как у ТС).

Как ты себе представляешь «сделать fsck», когда не читается суперблок (все его копии)? Нет суперблока — нет ФС, конец разговора.

Перестроение ФС с нуля, при нечитаемом дереве или даже суперблоке, из известных мне ФС умеет делать только reiserfs v3 (насчёт reiser4 не помню). Такая фича в btrfs тоже была бы очень полезна, но она не имеет никакого отношения к управлению бэдблоками.

Это заблуждение. Девайс не затрёт бедблок пока не получит от компьютера команду на запись в блок. А fsck не даст такую команду, пока не прочитает что в блоке. А диск не даст прочитать.

Сказанное тобой неверно. И вообще говоря при чём здесь fsck?

Если у тебя бэдблок в данных, то btrfs попытается его прочесть, не сможет и вернёт EIO. На этом месте пользователь удалит испорченный файл, после чего бэдблок станет относиться к свободному месту, а когда на это место рано или поздно попадёт новый файл, диск сделает реаллокацию.

Если у тебя бэдблок в метаданных, то btrfs попытается его прочесть, не сможет, пойдёт во вторую копию, прочитает вторую копию и восстановит первую копию из второй. На этом месте диск опять же сделает реаллокацию.

Ну и даже если бы это было верно, это не отменяет сказанного. Управление бэдблоками на стороне ОС — бесполезный архаизм.

Исходная версия intelfx, :

Здесь речь о том, чтобы сделать fsck, когда метаданные на в блоке, который не читается с девайса (стабильно возвращается ошибка как у ТС).

Как ты себе представляешь «сделать fsck», когда не читается суперблок (все его копии)?

Это заблуждение. Девайс не затрёт бедблок пока не получит от компьютера команду на запись в блок. А fsck не даст такую команду, пока не прочитает что в блоке. А диск не даст прочитать.

Сказанное тобой неверно. И вообще говоря при чём здесь fsck?

Если у тебя бэдблок в данных, то btrfs попытается его прочесть, не сможет и вернёт EIO. На этом месте пользователь удалит испорченный файл, после чего бэдблок станет относиться к свободному месту, а когда на это место рано или поздно попадёт новый файл, диск сделает реаллокацию.

Если у тебя бэдблок в метаданных, то btrfs попытается его прочесть, не сможет, пойдёт во вторую копию, прочитает вторую копию и восстановит первую копию из второй. На этом месте диск опять же сделает реаллокацию.

Ну и даже если бы это было верно, это не отменяет сказанного. Управление бэдблоками на стороне ОС — бесполезный архаизм.