
Ich verwende eine virtuelle Maschine auf einem Server, auf den ich nicht zugreifen kann, und habe das Dateisystem im schreibgeschützten Modus gemountet:
# dmesg
....
[2.535658] EXT4-fs (vda): Couldn't remount RDWR because of unprocessed orphan inode list. Please umount/remount instead
Also habe ich versucht, Folgendes auszuführen:
# 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!
Ausgabe von 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
Ausgabe von 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)
Natürlich kann ich e2fsck nicht aktualisieren, da ich ein schreibgeschütztes Dateisystem habe. Wie kann ich aus der Schleife herauskommen?
Antwort1
Es sieht so aus, als ob Sie eine Ramdisk (tmpfs-Dateisystem) haben /run
, die schreibgeschützt ist. Können Sie e2fsck
dort die aktuellere Version herunterladen? Dann sollten Sie in der Lage sein,
- Führen Sie
e2fsck -f /dev/vda
es aus/run
und reparieren Sie Ihr Root-Dateisystem. - Neustart. Dadurch werden Ihre neu heruntergeladenen Dateien gelöscht
e2fsck
, da tmpfs-Dateisysteme beim Neustart neu initialisiert werden. Ihr Root-Dateisystem sollte jetzt jedoch lesbar/schreibbar sein. - Laden Sie es
e2fsck
erneut auf das Root-Dateisystem herunter.
Wenn Sie das Root-Dateisystem nach der Reparatur tatsächlich erneut mounten können (ohne Neustart), sollten Sie einfach in der Lage sein, es e2fsck
dorthin zu kopieren /sbin
(oder wohin es auch gehört).
Antwort2
Die Antwort hängt davon ab, wie dieser Fehler entstanden ist.
Dies kann passieren, wenn Sie einen neueren Kernel gebootet haben und dieser Ihr ext4-Dateisystem auf eine neuere Version aktualisiert hat, die Ihr Standardkernel nicht vollständig unterstützt. In diesem Fall kann die Lösung ganz einfach sein, indem Sie den neueren Kernel erneut booten und das Dateisystem sauber aushängen.
Wenn Sie jedoch „nichts getan“ haben und der Fehler von selbst aufgetreten ist, kann dies auf eine zufällige Beschädigung der Hardware hinweisen. In diesem Fall wäre es ratsam, zunächst alle benötigten Daten zu sichern (es ist eigentlich immer eine gute Idee, Daten zu sichern). Sie könnten scp
/ verwenden sftp
, um alle wichtigen Daten auf Ihrer Workstation zu sichern, oder, wenn Sie einen anderen Server zur Verfügung haben, eine vollständige Systemsicherung durchführen, zum Beispiel:
otherserver# nc -l -p 8080 > brokenserver-backup.tar.gz
brokenserver# tar zcf - / | nc otherserver.example.com 8080
Nachdem Sie ein funktionierendes Backup haben, müssen Sie ein neueres besorgen, e2fsck
wie @G-Man vorgeschlagen hat. Wie Sie jedoch festgestellt haben, benötigen Siestatisch kompiliert/verlinktVersion von e2fsck, sonst wird ein Fehler über fehlende dynamische Bibliotheken ausgegeben. So geht's.
Dazu müssen Sie zunächst die statische Version herunterladen. Das Gute daran ist, dass sie für jede GNU/Linux-Distribution geeignet ist. Ich bevorzuge die von 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
Alternativ können Sie auf Ihre Workstation herunterladen und sftp
den Client wie folgt verwenden:Filezillaum es in /run
das Verzeichnis auf dem defekten Server zu kopieren.
Dann müssen Sie es entpacken. Für .deb
verwenden Sie ar
und 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
Notiz: wenn ar
ausgepacktDaten.tar.gzanstattDaten.tar.xz, dann würden Sie tar zxvf data.tar.gz
zum Entpacken verwenden. Wenn Sie einige der Tools vermissen ( ar
, tar
, gzip
, xz
) oder Ihnen der Speicherplatz ausgeht, können Sie dies auch auf jedem anderen GNU/Linux-Server oder jeder anderen GNU/Linux-Workstation entpacken und nur die sbin/e2fsck.static
Datei auf den Brokenserver kopieren.
dann gelangst du endlich zu fsck:
brokenserver:/run# chmod 755 /run/sbin/e2fsck.static
brokenserver:/run# ./sbin/e2fsck.static /dev/vda
Notiz:wenn du bekommst"Zugriff verweigert"Fehler, es ist wahrscheinlich entweder weil Ihr /run
montiert istkeinexec(nicht in Ihrem Fall, aber es wäre, würden Sie es mit beheben mount -oremount,exec /run
, oder weil Sie falsche Architektur heruntergeladen (zum Beispiel amd64
binär auf alt i386
- sieheBogen(1)).strace(1)würde Ihnen am Ende weitere Informationen geben, wie:
execve("/run/sbin/e2fsck.static", ["/run/sbin/e2fsck.static"], [/* 22 vars */]) = -1 ENOEXEC (Exec format error)
oder
execve("/run/sbin/e2fsck.static", ["/run/sbin/e2fsck.static"], [/* 22 vars */]) = -1 EACCES (Permission denied)