실수로 전체 서버를 압축했습니다


10

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

그래서 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 일 동안 포럼을 숨겨 왔는데 여전히 같은 시점에 있습니다. 도와주세요?


3
그것들이 mysql db라면 반드시 부팅 할 필요는 없습니다. 이 경우 드라이브를 슬레이브로 마운트하고 / var / lib / mysql 디렉토리에 복사하려고합니다.
user16081-JoeT

8
새 저장 장치에 새로 설치하십시오. 기존 드라이브를 마운트하고 필요에 따라 데이터를 전송하십시오. 수리는 그만한 가치가 없을 것이라고 확신합니다.
Zoredache

7
이것이 백업에서 복원하는 지점입니다. 그리고 다음에 루트 사용자로서 권한이없는 작업을 수행하지 마십시오.
Magellan

1
because of version differences,정확히 같은 버전으로 다시 설치하십시오. we have corruption issues,데이터가 손상되었을 수 있습니다. 부팅 가능하도록 시스템을 복구하면 데이터가 휴지통에있는 경우 도움이되지 않습니다. 데이터베이스가 사용 중일 때 gzip 명령이 데이터베이스 파일을 압축 한 경우에는 필연적입니다.
Zoredache

5
해당 명령을 실행하는 동안 DB 소프트웨어가 실행중인 경우 DB를 복구하지 못할 수 있습니다. Gzip은 파일을 행복하게 압축 한 다음 연결을 해제했습니다. 그러나 DB 소프트웨어는 여전히 파일을 열고 변경 사항을 커밋했습니다. 중지 되 자마자 파일이 제거되었습니다.
toppledwagon

답변:


8

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

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


1
이것은 실제로 매력처럼 작동했습니다 ... 나는 이것에 대해 충분히 감사 할 수 없습니다! MySQL은 부팅되지 않지만 --force fsck를 아직 수행하지 않았으므로 잘 해결할 것입니다! 감사
Dexirian

1
대박. 도움이되어 다행입니다.
Michael Martinez

9

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

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


빠른 질문 : 우리는 이전 SQL 데이터베이스 서버를 확신하지 못하며 최신 서버는 다른 Linux Distro를 사용하고 있습니다. 최신 서버는 WHM과 함께 CentOS를 실행하고 있으며 이전 서버는 Debian / Unbuntu입니다. 그래서 제 질문은 어떻게 손상없이 SQL 데이터베이스를 효과적으로 마이그레이션 할 수 있습니까?
Dexirian

6

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

어쨌든 지금까지 실행되는 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 일 사이의 파일을 선택할 목적으로 나에게 맞습니다.


/ root에서 ls를 수행하면 아무것도 발견되지 않습니다. 그래서 부팅 할 때 fs 마운팅이 잘되지 않습니까? 어디서 바꿀 수 있습니까?
Dexirian

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
시스템 관리의 세계에 오신 것을 환영합니다.
Michael Martinez
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.