Файловая система по-прежнему показывает старое значение после сокращения в Linux, но показывает правильное значение в LVM

Используйте вместо этого параллельный:

doit() {
  i="$1"
  find "$i" -type f -print0 | xargs -r0 cat | md5sum |
    awk '{ print $1 }' |
    sort | md5sum
}
export -f doit
find -type d -links 2 | parallel --tag doit
3
23.04.2016, 15:48
1 ответ

resize2fs, вероятно, не завершил работу, но вы не можете сказать, потому что пропустили конец его вывода.

Вам не следовало не выполнять lvreduce в этот момент. Существует очень большая вероятность того, что это повредило часть вашей файловой системы. Обратите внимание, что вы не можете отменить эту операцию, выполнив lvextend и надеясь, что потерянные байты вернутся и что файловая система сможет восстановиться, потому что lvextend может вернуть вам другие байты.

Если бы мне пришлось гадать, то, вероятно, произошло то, что ваше соединение было сброшено в тот момент, когда resize2fs работал некоторое время, не выдавая никаких результатов. После сброса соединения он продолжал работать некоторое время (он проигнорировал SIGHUP или не получил его?). Но позже, вероятно, когда она уже почти завершилась, она выдала какой-то статусный вывод и была быстро убита, потому что получила ошибку или сигнал о попытке записи на несуществующий терминал. И она так и не завершилась.

В каком состоянии resize2fs оставил файловую систему - вопрос открытый, но можно надеяться, что он оставил ее в достаточно пригодном для использования состоянии, с незафиксированным уменьшением размера файловой системы.

Мораль этой части истории: выполняйте критические операции вроде resize2fs под screen (или как at задания, или как угодно), если есть вероятность, что ваше соединение может быть прервано.

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

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

  • fsck файловая система как есть. Это сообщит вам о любых попытках чтения за пределы конца файловой системы и, возможно, даст вам представление о том, сколько данных находится за пределами этих границ. Надеюсь, не очень много, поскольку resize2fs, возможно, успел переместить эти данные до того, как произошел сбой.
  • расширьте блочное устройство с помощью lvextend до прежнего размера, просто чтобы порадовать файловую систему, затем fsck, а затем попробуйте повторить всю операцию с начала. Это потенциально может привести к негласному повреждению, поскольку файловая система обращается к диапазонам байтов, которые лежат за пределами диапазона, где лежат допустимые данные.

Я не уверен, что именно сработает лучше для вас. Это зависит от расположения, которое имело место в файловой системе, и от того, как часто к ней прикасались после события (вы упоминаете, что монтировали ее, вероятно, чтение+запись, по крайней мере, один раз...)

.
6
27.01.2020, 21:13

Теги

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