Записи. Переустановка пакетов для восстановления потерянных файлов в ubuntu
11 лет назадДосталось мне перенести с систему с умирающего жёсткого диска на новый. В следствии проблемы с чтением некоторых файлов и папок на уже покрывающемся плохими секторами диске, перенести всю систему не представлялось возможным.
Всё что можно перешло на новый диск аналогичной структуры, Внеся корректировки в файл /etc/fstab, загрузчик даже смог стартовать и передать управление системе, но она выпала в осадок, заявив, что: "Что вы мне тут не..." В общем было ясно что ей для счастья нехватает самого дорого.
Пробуем завестись через chroot подключив диск вторым к работающей системе:
mount /dev/sdd1 /mnt mount --bind /proc /mnt/proc mount --bind /dev /mnt/dev chroot /mnt /bin/bash
Но и тут слышим посыл по адресу, что таких-то библиотек нехватает. Не страшно, переносим их с работающей системы, вставляя в нужные места. После какого-то места переключить оболочку на новую систему удалось.
Что делать дальше? Сеть, она как бы есть, но одновременно с этим её. Создаётся ощущение что пациент живой, может даже руками двигать, но ничего не видит. По этой причине меняем адрес сервера с пакетами, с доменного имени, на простой адрес. И о чудо, оттуда он начинает видить файлы. Значит можно приступить к попытке переустановить пакеты по одному:
#!/bin/bash for pkg in `dpkg --get-selections | awk '{print $1}' | egrep -v '(dpkg|apt|mysql|mythtv)'` ; do apt-get -y --force-yes install --reinstall $pkg ; done
Запустив это и подождав кучу времени пока все переустановится (более 14 часов) система смогла самостоятельно запуститься, но не все пакеты смогли настроиться и сеть опять работала только по прямым адресам, а по именам ничего видеть не желала. Хотя программы nslookup и dig, спокойно могли видеть и говорить ip адреса прячущиеся за именами хостов. Из этогоможно было понять, что проблема не в глазах, а где-то в мозгах.
Воспользовавшись программой strace, вариант запуска: strace ping ya.ru удалось заметить, что система не может найти файл /lib/i386-linux-gnu/libnss_dns.so.2, точнее файл был, но он был ссылкой на пустое место, и пригнав сиё чудо с живой системы, больной прозрел.
Несмотря на такой успех, оставалась проблема с тем, что не все пакеты стоят, и основная проблема возникала при попытке выпонить конфигурирование. На что выдавались схожие ошибки:
iconv_open ("UTF-8//IGNORE", "ISO-8859-1"): Недопустимый аргумент или unsupported conversion from iso-8859-1 to utf-8
Было ясно, что скорее всего отстутствуют файлы с кодировками. Но попытки найти отвечающий за них пакет не увенчались успехом, поэтому пришлось применить уже упомяную тут программу strace, с параметром -o filename, в который и была выведена вся информация об обращениях к системе конфигуратором. Что показало что нету файлов в папке: /usr/lib/i386-linux-gnu-gconv куда они незамедлительно прибыли из живой системы и случилось чудо, к больному вернулся дар менять кодировки на лету, что позволило ему закончить настройку пакетов.
Надеюсь на этом большинство болячек было залечено и больного можно называть уже вполне здоровым, хотя шрамы могут ещё где-нибудь показаться. Для профилактики было применено ещё 2 метода проверки и лечения системы:
dpkg --get-selections "*" >myselections # Запоминаем текущие пакеты debconf-get-selections > debconfsel.txt # Запоминаем специфически настройки пакетов заданные пользователем dselect update # Обновляем информацию о пакетах debconf-set-selections < debconfsel.txt # Восстанавливаем настройки dpkg --set-selections <myselections # Возвращаем список установленных пакетов apt-get -u dselect-upgrade # или dselect install, выполняем обновление отмеченных пакетов.
И для полного слияния с системой:
dpkg-reconfigure -phigh -a # Заставляем переконфигурировать все пакеты (операция может занять час и больше времени)
Надеюсь этот опыт пригодится в последующей жизни, а также поможет кому-то оживить упавшую из-за плохого диска систему.