SergES » 2019-10-07 17:01:28
К продолжению.
Дождался выходного офиса, сделал бэкап, на бэкапе запустил однопользовательский режим, и fsck_ffs -y /dev/ada0s1 отказывается исправлять из-за включенного soft update, отключение ничего не дало, показывает отключение успешно но остается включенным, после этого система не реагирует ни на одну команду (device not configured),
сделал бэкап битой fs? как?
причем тут soft update?
Проблемы с UFS2 возникают в случае включенного журнала "j", если система ставилась с умолчаниями
во время Install, то UFS2 by default создается с опциями "SUJ", это когда:
флаг -U - soft update
флаг -j - journaling
В инсталляторе есть возможность изменить параметры создания UFS2.
Прим: не путать журнал J (от gjournal/geom), с ufs2 журналом j.
ufs2 journaling - за счет ведения журнала, позволяет ускорить процесс fsck на
порядок или два, что существенно для FS >20-30GB и позволяет сократить
время проверки, что существенно при загрузке системы.
Вот только надежность журналирования - никакущая, без UPS лучше не использовать.
В журналировании исправили МОРЕ ошибок, но не все, не помню в каком году,
и признали работу ufs journaling стабильной и запустили в production, да еще
и в Installer'е использую ключи -U и -j by default.
На этом проект закрыли и уведомили что больше развивать и править ufs2 journaling не будут.
То что ошибок в журналировании еще достаточно - факт известный.
В отличие от UFS2+SUJ, чистый UFS2 или UFS2 + SU (soft update), практически неубиваем.
Вот только если у Вас UFS2 уже битая, tunefs -j disable - отключение журанала,
и tunefs -n disable - отключение soft update, на fsck не повлияют.
Сперва нужно привести в порядок FS, а затем отключать journaling.
снова перезагруз но монтирование корня в режиме ro, tunefs -p показывает все отключено, запускаю fsck_ffs -y /dev/ada0s1 промелькивает куча ошибок, но в конце marked clean, перегружаюсь снова, запускаю fsck снова ошибка суперблока...Наверно все же неправильно было сделанно growfs, оставил все попытки, мелькнула мысль, так как на этих системах с битым супеблоком dump не запускается, но есть самая первая оригинальная чистая система, до growfs, могу ли с нее загрузиться, сделать на винте новую разметку и накатить dump-ом с битой системы данные? Не перенесутся ошибки системы?
Ваша проблема в том, что Вы хотите исправить ошибку, не понимая сути и логики, отсюда и
проблемы, что и как Вы делаете - не ясно.
Вот почему я могу делать dd на лету, использовать dump|restore и другие варианты переноса,
sorry, а Вы не можете.
Вернемся к нашим баранам:
- у нас FS создана с SUJ, и не проходит fsck - значит что, правильно - dump|restore
не катит по двум причинам:
1) SUJ (тут есть выход, загрузка с live cd/usb и dump| restore с указаним device, например ada0s1a)
2) не проходит FSCK
В это случае, если FS все же монтируется RO, все данные можно перенести на другой размеченный
диск, используя на выбор: tar, pax, cpio или rsync.
Как:
- если используем tar или pax или cpio - достаточно загрузиться с live cd/usb
- если rsync - нужно сделать загрузочную флешку FreeBSD с установленным нее
rsync
PC: ada0 - битый, ada1 - новый
- загрузились с flash
- используя gpart размечаем ada1, прописываем загрузчик и создаем FS: newfs
- теперь создаем маунт поинты для монтирования FS
# mkdir /ada0 (если у нас несколько FS, то с поддиректориями: /ada0/usr /ada0/var ...)
# mkdir /ada1 (можно одну корневую FS или несколько, как поддиректориями для ada0)
- монтируем битые FS с ada0 в RO (только в RO)
# mount -r /dev/ada0sa /ada0
- монтируем новые FS созданные на ada1
# mount /dev/ada1sa /ada1
Что теперь, теперь можем tar|cpio|pax|rsync с /ada0 на /ada1.
Что имеем, на ada1 мы создали FS руками: newfs -U /dev/ada1sa - она
девственно чистая и без ошибок, затем мы ее смонтировали в /ada1 на RW
и скопировали с /ada0 (RO) все что нам нужно.
Все. (мысль проста, битую FS смонтировали RO, новую в RW и сопировали
все с битой на новую)
Если у нас есть образ или диск с оригинальной FS до growfs, можно
взять и ее, только мы потеряем все изменения и новые файлы,
которые появились после переноса.
Берем PC:
- флешку с FreeBSD
- диск до growfs, далее старый
- новый диск
1. загружаемся с флешки
2. выполняем fsck_ffs -y для FS которые на "старом" диске
далее можем через tunefs отменить journaling, тогда потом
можно dump|restore
3. размечаем новый диск и прописываем загрузчик: gpart,
понятно что на новом диске можем создавать FS больше чем на старом
4. создаем FS на новом диске
5. создаем директории для mount points
6. монтируем
далее варианты
a. dump|restore
b. tar|pax|cpio|rsync