Я случайно заархивировал весь свой сервер

10

Хорошо, если кто-то хочет играть в бога и творить чудеса, я не в себе.

Итак, мне было поручено создать сценарий, который бы находил файлы старше 6 месяцев, архивировал их, а затем удалял. На моем пути в создании сценария tihs я запустил это:

find / -type f -mtime -400 ! -mtime -180 | xargs gzip blablabla

И это дало КАЖДОМУ ОДНОМУ ФАЙЛУ расширение .gz. Теперь я отменил это, как только заметил, но было уже слишком поздно. После завершения команды ни одна из моих команд bash не будет работать, потому что переменная $ PATH очищается сама. Я перепробовал много вещей, прежде чем понял, в чем проблема.

Итак, после распаковки всего, что я до сих пор не могу загрузить. Мне удалось сделать это для спасения, после чего я следовал онлайн инструкциям для:

root (hd0,0)
setup (hd0)
kernel (hd0,0)/boot/vml[...]
initrd (hd0,0)/boot/initrd.im[...]

После того, как мой Linux частично загружается, но выдает следующие ошибки:

Begin : Running /scripts/init-bottom ... mount : mounting /dev on /root/dev failed : No such file or directory
mount: mounting /sys/ on /root/sys failed: No such file or directory
mount: mounting /proc on /root/proc failed : No such file or directory
Target filesystem doesn't have requrested /sbin/init.
No init found. Try passing init= bootarg.

Я попытался восстановить файловую систему, я загрузился с 3-х разных LiveCD / Rescue-дисков, я выполнил загрузочное восстановление с 2-х разных дисков. Я заставил fscks ...

У меня действительно нет идей, и мне нужно, чтобы этот сервер хотя бы загрузился, чтобы я мог восстановить свои базы данных SQL. Я отчаянно нуждаюсь в помощи, я даже заплачу, если понадобится.

Я целыми днями прячу форумы в течение 3 дней, чтобы найти возможное решение, и я все еще в том же положении ... Помогите, пожалуйста?

Dexirian
источник
3
если это mysql db, вам не обязательно загружаться; в этом случае я бы попытался смонтировать диск в качестве ведомого и скопировать в каталог / var / lib / mysql
user16081-JoeT
8
Чистая установка на новые устройства хранения. Смонтируйте старый диск, перенесите данные по мере необходимости. Могу поспорить, что ремонт не будет стоить усилий.
Зоредаче
7
Это точка, где вы восстанавливаете из резервной копии. И помните, что в следующий раз не выполняйте непривилегированные действия от имени пользователя root.
Магеллан
1
because of version differences,переустановите с точно такой же версией. we have corruption issues,Ваши данные могут быть повреждены. Восстановление системы, чтобы она была загрузочной, не поможет вам, если данные были удалены. Если ваша команда gzip сжала файлы базы данных, пока база данных использовалась поврежденной, это неизбежно.
Зоредаче
5
Если ваше программное обеспечение БД работало во время выполнения этих команд, вы не сможете восстановить БД. Gzip с радостью заархивировал файл, а затем отменил связь. Но в вашем программном обеспечении БД все еще был открыт файл, и он вносил в него изменения. Как только он остановился, файл был удален.
toppledwagon

Ответы:

8

Это будет зависеть от того, достаточно ли восстановлены файловые системы, чтобы вы могли смонтировать эти разделы с LiveCD. Пока не пытайтесь загрузить систему. Сначала смонтируйте разделы и разархивируйте все файлы .gz. Это даст вам рабочие копии файлов init и системы. Затем вы можете использовать grub для восстановления загрузочного сектора. Затем загрузитесь в однопользовательском режиме и снова откройте файловую систему fsck. Если это работает, у вас будет работающая система. У вас также будет куча разархивированных файлов (например, man-страниц), которые действительно должны быть заархивированы, но это лучше, чем система, которая не загружается.

Если вы не можете смонтировать разделы с LiveCD, вам, к сожалению, не повезло. Ничто не восстановит вашу систему в этот момент.

Майкл Мартинес
источник
1
Это на самом деле работает как шарм ... я не могу отблагодарить вас за это! MySQL не загрузится, но я еще не запустил --force fsck, надеюсь, это все исправит! СПАСИБО
Dexirian
1
Потрясающие. Рад, что это помогло.
Майкл Мартинес
9

Первым делом я попробую запустить среду LiveCD и просто разархивировать все, надеясь, что система вернется в загрузочное состояние. Примечание: я был бы обеспокоен потенциальным повреждением данных, если исходный процесс gzip был прерван.

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

Боб Баркер
источник
Быстрый вопрос: мы не уверены в том, что старый сервер баз данных SQL, а новый сервер использует другой дистрибутив Linux. Более новый сервер работает под управлением CentOS с WHM, а старый сервер был либо Debian / Unbuntu. Итак, мой вопрос, как я могу эффективно перенести свои базы данных SQL без повреждений и тому подобное?
Дексириан
6

Общее мнение, что вам следует просто смонтировать диск в работающей системе и спасти ваши файлы, не является неправильным. Это разумная вещь, чтобы сделать. Но другой способ более веселый и очень познавательный. Я многому научился, борясь с выходом из беспорядочных ситуаций, когда другие люди просто сдавались и переустанавливали с нуля. (Не на сервере, от которого зависят другие люди ...)

Во всяком случае, пока у вас есть initramfs (initrd), который работает. Это хорошее начало. Но он не может завершить передачу обслуживания init, потому что init сейчас init.gzможет быть? Чтобы добиться какого-либо прогресса, было бы полезно точно знать, какой дистрибутив Linux у вас есть, поэтому мы можем посмотреть, какие инструменты доступны в его initramfs для экстренного использования.

Представленные вами сообщения об ошибках выглядят так, будто они могли быть получены из initramfs Debian. Если это Debian, то вы должны были получить (initramfs)приглашение оболочки на следующей строке после последней ошибки. Если вы сделали, вы должны посмотреть, что происходит с этими неудачными креплениями. это не /root/devхватает? ( /rootгде ваш обычный root fs должен быть смонтирован во время работы initramfs)

Если вы не получили подсказку оболочки, то что No init found. Try passing init= bootarg.будет после, будет интересно. Даже если это был всего лишь мигающий курсор, это подсказка. Если он кажется полностью замороженным, попробуйте получить некоторую информацию о том, какие процессы все еще существуют, используя magic sysrq или Ctrl + ScrollLock.

Initramfs Debian также позволяет запрашивать оболочку с несколькими специальными ориентирами, добавляя break=параметр в командную строку ядра. Например, чтобы получить оболочку перед Running /scripts/init-bottomстрокой, используйте break=bottom.

Кроме того: я не знаю, как findкоманда могла сжать каждый файл ... мне кажется правильным для выбора файлов в возрасте от 180 до 400 дней.


источник
Когда я делаю ls под / root, ничего не найдено. Таким образом, я могу взять это, монтаж fs не в порядке при загрузке? Где я могу изменить это?
Дексириан
1
@Dexirian так ты получить приглашение оболочки (вы должны использовать break=bottom?) ... да, к тому времени он пытается установить /root/devи /root/procи /root/sys, /rootдолжна быть реальной корневой файловой системой. Должно быть, раньше было сообщение об ошибке, не удалось смонтировать его. Вы включили root=параметр в командную строку ядра? Моя память немного нечеткая в этом вопросе, но я думаю, что root (hd0,0)просто говорит grub, где найти его файлы поддержки, и вам все равно нужно отдельно сообщить ядру, где находится корень.
Да, я использовал root =, kernel = initrd = и setup =, мне не нужно было использовать break = bottom. И я не обнаружил более раннее сообщение о неудачном монтировании, поскольку оно прокручивается очень быстро
Dexirian
@Dexirian Доступна ли прокрутка консоли? Shift + PgUp. И вы можете смонтировать его из (initramfs) подсказки, что-то вроде mount -r /dev/sda1 /root? cat /proc/partitionsчтобы увидеть, какие диски доступны.
1
Добро пожаловать в мир системного администрирования.
Майкл Мартинес