내 데비안 서버의 ext4 파티션이 손상되었습니다. 서버의 가동 시간은 약 1700일이었습니다. 안타깝게도 UPS에는 하루 종일 정전을 견딜 수 있는 배터리가 충분하지 않았습니다.
나는 거기에서 데비안 sid를 실행하고 있었고 (너무 멍청해서) systemd가 등장할 무렵 apt-get dist-upgrade를 중단했습니다. (더 바보같아)
정전 후 시스템 비상 모드로 부팅했는데 드라이브를 전혀 마운트할 수 없었습니다. (/dev/sdb1을 찾을 수 없습니다). 문제가 해결되는지 확인하기 위해 apt-get dist-upgrade를 시도했지만 잠시 후 실패하고 재부팅 후 systemd가 실패했기 때문에 더 이상 로그인할 수 없었습니다. 잠시 후 부팅 메뉴에서 sysvinit를 발견하고 Linux로 부팅할 수 있었습니다. (이걸 먼저 했어야 했는데! ㅋㅋㅋ)
손상된 파티션은 750GB 하드 드라이브에 있으며 /home에 사용됩니다. 사용된 공간은 약 100GB여야 하는데 968MB로 보고됩니다.
어떻게든 /(/dev/sda1)의 루트 디렉토리 구조가 /home(/dev/sdc1)으로 복사되었습니다. ???
root@server:/home# ls -lah
ls: cannot access 'run': Input/output error
ls: cannot access 'sys': Input/output error
ls: cannot access 'etc': Input/output error
total 92K
drwxr-xr-x 23 root root 4.0K Jan 14 2013 .
drwxr-xr-x 23 root root 4.0K Feb 11 14:23 ..
drwxr-xr-x 2 user2 user2 4.0K Nov 2 2010 bin
drwxr-xr-x 2 user1 user1 4.0K Feb 3 2013 boot
drwxrwxr-x 3 user2 user2 4.0K Aug 19 2005 dev
d????????? ? ? ? ? ? etc
drwxr-xr-x 2 user1 user1 4.0K Jan 15 2013 home
lrwxrwxrwx 1 root root 30 Jan 3 2013 initrd.img -> /boot/initrd.img-3.2.0-4-amd64
drwxr-xr-x 14 root root 4.0K Jan 9 2013 lib
drwxr-xr-x 2 root root 4.0K Jan 3 2013 lib64
drwx------ 2 root root 16K Jan 3 2013 lost+found
drwxr-xr-x 2 user1 user1 4.0K May 31 2010 media
drwxr-xr-x 6 user1 user1 4.0K Jan 15 2013 mnt
drwxr-xr-x 2 user1 user1 4.0K Feb 5 2006 opt
drwxr-xr-x 2 user1 user1 4.0K Feb 3 2013 proc
drwxr-xr-x 2 user1 user1 4.0K Feb 3 2013 root
d????????? ? ? ? ? ? run
drwxr-xr-x 4 user3 user3 4.0K Mar 26 2013 sbin
drwxr-xr-x 2 user1 user1 4.0K Jan 15 2013 selinux
drwxr-xr-x 2 user1 user1 4.0K Feb 3 2013 srv
d????????? ? ? ? ? ? sys
drwxr-xr-x 3 user4 user4 4.0K Nov 27 23:05 tmp
drwx------ 2 user5 user5 4.0K Aug 17 2009 usr
drwx--x--x 13 user2 user2 4.0K Jan 12 2012 var
lrwxrwxrwx 1 root root 26 Jan 3 2013 vmlinuz -> boot/vmlinuz-3.2.0-4-amd64
(사용자 이름이 변경되었습니다)
이는 /(/dev/sda1)과 동일해 보입니다.
하지만 이러한 폴더의 파일은 원래 위치에 있어서는 안 되지만 읽을 수는 있습니다. 예를 들어, "opt" 안에는 내 사용자 디렉토리 어딘가에 있는 jpeg가 있습니다. "var" 안에는 한 사용자의 파일과 폴더가 거의 그대로 있고 올바른 디렉터리 구조와 파일 이름이 있지만 적어도 한 곳에서 파일이 누락되어 있습니다.
파티션의 dd 복사본을 다른 하드 드라이브에 만들고 fscking을 시도했는데, 이로 인해 많은 문제가 분명히 "수정"되었지만 더 이상 마운트할 수 없었습니다. "잘못된 파일 시스템 유형, 잘못된 옵션, /dev/sdc1의 슈퍼블록 오류, 코드 페이지 또는 도우미 누락 또는 기타 오류."
어떻게 이런 일이 일어났는지, 어떻게 해결해야 할지 전혀 모르겠고, 그럴 가능성에 대해서도 큰 기대를 하지 않습니다. 이것은 내가 리눅스에서 본 것 중 가장 이상한 일이며 어떻게 그런 일이 일어났는지 가장 알고 싶습니다. 내 모든 파일을 복구할 수 있다면 정말 행복할 것 같아요!
나는 PhotoRec에 대해 알고 있으며 원래 디렉터리 구조를 복구할 수 없는 경우 이를 사용할 계획입니다.
답변1
dd
먼저, 백업으로 gddrescue
이나 다른 이미징 유틸리티(작동할 수도 있음)를 사용하여 파티션의 복사본을 만듭니다 cp
.
이것이v3.22013 커널인 경우 최신 배포/커널에서 재부팅한 다음 fsck
영향을 받는 파티션에서 최신 버전을 실행해 보세요. 최신 배포판용 파일 유틸리티는 다음과 같습니다.5년간의 버그 수정 및 개선, 이것이 도움이 될 수 있습니다.