액세스할 수 없는 서버에서 가상 머신을 사용하고 있으며 파일 시스템을 읽기 전용 모드로 마운트했습니다.
# dmesg
....
[2.535658] EXT4-fs (vda): Couldn't remount RDWR because of unprocessed orphan inode list. Please umount/remount instead
그래서 나는 다음을 실행하려고합니다.
# e2fsck -f /dev/vda
e2fsck 1.42.9 (28-Dec-2013)
/dev/vda has unsupported feature(s): metadata_csum
e2fsck: Get a newer version of e2fsck!
출력 df
:
/dev/root 41022688 37964956 944196 98% /
devtmpfs 4084008 0 4084008 0% /dev
tmpfs 4085752 0 4085752 0% /dev/shm
tmpfs 4085752 397012 3688740 10% /run
tmpfs 4085752 0 4085752 0% /sys/fs/cgroup
tmpfs 817152 0 817152 0% /run/user/0
tmpfs 817152 0 817152 0% /run/user/1000
출력 mount
:
/dev/vda on / type ext4 (ro,relatime,stripe=8191,data=ordered)
devtmpfs on /dev type devtmpfs (rw,relatime,size=4084008k,nr_inodes=1021002,mode=755)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=23,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)
configfs on /sys/kernel/config type configfs (rw,relatime)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
nfsd on /proc/fs/nfsd type nfsd (rw,relatime)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,pagesize=2M)
mqueue on /dev/mqueue type mqueue (rw,relatime)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=817152k,mode=700)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=817152k,mode=700,uid=1000,gid=1000)
물론 읽기 전용 파일 시스템이 있기 때문에 e2fsck를 업데이트할 수 없습니다. 어떻게 하면 루프에서 벗어날 수 있나요?
답변1
/run
읽기/쓰기가 마운트된 램디스크(tmpfs 파일 시스템) 가 있는 것 같습니다 . 거기에서 최신 것을 다운로드할 수 있나요 e2fsck
? 그렇다면 당신은 할 수 있어야합니다
e2fsck -f /dev/vda
/run
루트 파일 시스템 에서 실행하고 복구합니다.- 재시작.
e2fsck
재부팅 시 tmpfs 파일 시스템이 다시 초기화되므로 새로 다운로드한 tmpfs 파일 시스템이 지워집니다 . 하지만 이제 루트 파일 시스템은 읽기/쓰기가 가능해야 합니다. - 루트 파일 시스템으로 다시 다운로드합니다
e2fsck
.
실제로, 루트 파일 시스템을 복구한 후(재부팅하지 않고) 다시 마운트할 수 있다면 복사할 수 있는 위치 (또는 그것이 속한 곳) e2fsck
가 가능해야 합니다./sbin
답변2
대답은 이 오류가 어떻게 발생하는지에 따라 달라집니다.
이는 최신 커널을 부팅하고 ext4 파일 시스템을 기본 커널이 완전히 지원하지 않는 최신 버전으로 업그레이드한 경우 발생할 수 있습니다. 그렇다면 해결책은 최신 커널로 재부팅한 다음 파일 시스템을 완전히 마운트 해제하는 것만큼 간단할 수 있습니다.
그러나 "아무 작업도 수행하지 않고" 오류가 저절로 나타나는 경우 이는 임의의 하드웨어 손상을 나타낼 수 있습니다. 이 경우 먼저 필요한 모든 데이터를 백업하는 것이 좋습니다(실제로 항상 백업하는 것이 좋습니다). 모든 중요한 데이터를 워크스테이션에 사용 scp
/ 백업 할 수 있으며 , 사용 가능한 다른 서버가 있는 경우 다음과 같이 전체 시스템 백업을 수행할 수 있습니다.sftp
otherserver# nc -l -p 8080 > brokenserver-backup.tar.gz
brokenserver# tar zcf - / | nc otherserver.example.com 8080
유효한 백업이 있으면 e2fsck
@G-Man이 제안한 대로 업데이트된 백업을 가져와야 합니다. 그러나 당신이 발견한 것처럼 당신은정적 컴파일/링크e2fsck 버전이 아니면 동적 라이브러리 누락 오류가 발생합니다. 수행 방법은 다음과 같습니다.
이렇게 하려면 먼저 정적 버전을 다운로드해야 합니다. 이것의 장점은 모든 GNU/Linux 배포판에서 작동한다는 것입니다. 나는 다음을 선호한다 http://packages.debian.org/e2fsck-static:
su
cd /run
wget http://ftp.de.debian.org/debian/pool/main/e/e2fsprogs/e2fsck-static_1.44.2-1~bpo9+1_amd64.deb
또는 워크스테이션에서 sftp
클라이언트를 다운로드하여 사용할 수 있습니다.파일질라/run
손상된 서버의 디렉터리 에 복사합니다 .
그런 다음 포장을 풀어야합니다. 의 경우 및 을 .deb
사용합니다 .ar
tar
brokenserver:/run# ar xv e2fsck-static_1.44.2-1~bpo9+1_amd64.deb
x - debian-binary
x - control.tar.gz
x - data.tar.xz
brokenserver:/run# tar Jxvf data.tar.xz
./
./sbin/
./sbin/e2fsck.static
./usr/
./usr/share/
./usr/share/doc/
./usr/share/doc/e2fsck-static/
./usr/share/doc/e2fsck-static/changelog.Debian.gz
./usr/share/doc/e2fsck-static/copyright
./usr/share/man/
./usr/share/man/man8/
./usr/share/man/man8/e2fsck.static.8.gz
노트: ar
열려있는 경우data.tar.gz광저우바꾸다data.tar.gzxz, 압축을 풀 때 사용할 수 있습니다 tar zxvf data.tar.gz
. 또는 일부 도구( ar
, tar
, gzip
, ) 가 없거나 xz
공간이 부족한 경우 다른 GNU/Linux 서버 또는 워크스테이션에서 도구의 압축을 풀고 sbin/e2fsck.static
파일을 손상된 서버에 복사할 수 있습니다.
그런 다음 마침내 fsck를 수행할 수 있습니다.
brokenserver:/run# chmod 755 /run/sbin/e2fsck.static
brokenserver:/run# ./sbin/e2fsck.static /dev/vda
노트:당신이 얻는다면"허가가 거부되었습니다"오류가 발생했습니다. 아마도 /run
설치했기 때문일 수 있습니다.실행되지 않음( 귀하의 경우는 아니지만 경우가 있으므로 다음을 mount -oremount,exec /run
사용하여 amd64
문제를 해결할 수 있습니다.i386
아치(1)).트랙(1)마지막에는 다음과 같은 추가 정보가 제공됩니다.
execve("/run/sbin/e2fsck.static", ["/run/sbin/e2fsck.static"], [/* 22 vars */]) = -1 ENOEXEC (Exec format error)
또는
execve("/run/sbin/e2fsck.static", ["/run/sbin/e2fsck.static"], [/* 22 vars */]) = -1 EACCES (Permission denied)