실수로 전체 서버를 압축했습니다 압축 해제하십시오. 나는

누군가가 신을 플레이하고 기적을 행하고 싶다면 좋아.

그래서 6 개월이 지난 파일을 찾아서 압축 한 다음 삭제하는 스크립트를 작성해야했습니다. tihs 스크립트를 만드는 도중에 나는 이것을 실행했다 :

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

그리고 그것은 모든 단일 파일에 .gz 확장자를주었습니다. 이제는 눈치 채지 못했지만 너무 늦었습니다. 명령이 완료되면 $ PATH 변수가 자체 비워 져서 내 bash 명령이 작동하지 않습니다. 나는 문제가 무엇인지 깨닫기 전에 많은 것을 시도했다.

그래서 여전히 부팅 할 수없는 모든 것을 압축 해제하십시오. 나는 다음에 대한 온라인 지침을 따른 후에 구조를 제거하기 위해 관리했습니다.

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

리눅스가 부분적으로 부팅되었지만 다음과 같은 오류가 발생합니다.

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 개의 다른 dicsc에서 부팅 복구를 실행했습니다. 나는 fscks를 강요했다 …

나는 정말로 아이디어가 없어서이 서버를 최소한 부팅해야 SQL 데이터베이스를 복구 할 수 있어야합니다. 도움이 절실합니다. 필요한 경우 비용을 지불 할 수도 있습니다.

가능한 해결책을 찾기 위해 하루 종일 3 일 동안 포럼을 숨겨 왔는데 여전히 같은 시점에 있습니다. 도와주세요?



답변

이는 파일 시스템이 LiveCD에서 해당 파티션을 마운트 할 수있을만큼 복구되었는지 여부에 따라 다릅니다. 아직 시스템 부팅을 방해하지 마십시오. 먼저 파티션을 마운트하고 모든 .gz 파일을 압축 해제하십시오. 그러면 init 및 시스템 바이너리의 작업 사본이 제공됩니다. 그런 다음 grub을 사용하여 부팅 섹터를 복구 할 수 있습니다. 그런 다음 단일 사용자 모드로 부팅하고 파일 시스템을 다시 fsck하십시오. 작동하면 실행중인 시스템이있는 것입니다. 또한 실제로 압축해야하는 압축이 풀린 파일 (예 : 맨 페이지)이 많이 있지만 부팅 할 수없는 시스템을 사용하는 것보다 낫습니다.

LiveCD에서 파티션을 마운트 할 수 없다면 불행히도 운이 없습니다. 그 시점에서 시스템을 복구하는 것은 없습니다.


답변

가장 먼저 시도 할 것은 LiveCD 환경을 실행하고 시스템을 부팅 가능한 상태로 되돌릴 것으로 기대하면서 모든 것을 압축 해제하려고 시도하는 것입니다. 참고 : 원래 gzip 프로세스가 중단되면 잠재적 인 데이터 손상이 걱정됩니다.

그렇지 않으면 다른 사람들이 제안한 것처럼 DB를 새 시스템으로 마이그레이션하려고 시도했지만 발생하는 것처럼 노동 집약적 종속성 및 구성 문제가 개별적으로 해결되어야 할 수도 있습니다.


답변

작업 시스템에 디스크를 마운트하고 파일을 구출해야한다는 일반적인 합의는 잘못된 것이 아닙니다. 현명한 일입니다. 그러나 다른 방법은 더 재미 있고 교육적입니다. 다른 사람들이 방금 포기하고 처음부터 다시 설치했을 것 같은 지저분한 상황에서 벗어나기 위해 많은 것을 배웠습니다. (다른 사람들이 의존하는 서버는 아닙니다 …)

어쨌든 지금까지 실행되는 initramfs (initrd)가 있습니다. 좋은 시작입니다. 그러나 init가 init.gz아마도 어쩌면 init 로의 핸드 오프를 완료 할 수 없습니까? 진전을 이루려면 Linux 배포판이 무엇인지 정확히 아는 것이 도움이되므로 비상용으로 initramfs에서 어떤 도구를 사용할 수 있는지 찾아 볼 수 있습니다.

제시 한 오류 메시지는 데비안의 initramfs에서 온 것 같습니다. 데비안이라면 (initramfs), 마지막 오류 후 다음 줄에 쉘 프롬프트가 나타납니다. 만약 그렇다면, 실패한 마운트에서 무슨 일이 일어나고 있는지 조사해야합니다. 되어 /root/dev실종? ( /rootinitramfs를 실행하는 동안 일반 루트 fs를 마운트해야하는 곳)

쉘 프롬프트를 얻지 못했다면 다음에 나오는 No init found. Try passing init= bootarg.것이 흥미로울 것입니다. 커서가 깜빡이는 것 일지라도 단서입니다. 완전히 멈춘 것처럼 보이는 경우 매직 sysrq 또는 Ctrl + ScrollLock을 사용하여 어떤 프로세스가 여전히 사용 중인지에 대한 정보를 얻으십시오.

데비안 initramfs를 사용하면 break=커널 명령 행에 매개 변수를 추가하여 몇 가지 특별한 랜드 마크에서 쉘을 요청할 수 있습니다 . 예를 들어, Running /scripts/init-bottom줄 앞에 쉘을 얻으려면을 사용하십시오 break=bottom.

따로 : 나는 find명령이 모든 파일을 어떻게 압축 했는지 알 수 없습니다 … 180에서 400 일 사이의 파일을 선택할 목적으로 나에게 맞습니다.


답변