孤立した inode の問題

孤立した inode の問題

アクセスできないサーバー上の仮想マシンを使用しており、ファイルシステムを読み取り専用モードでマウントしています。

# 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

読み取り/書き込み可能なRAMディスク(tmpfsファイルシステム)をお持ちのようです/run。最新のものをダウンロードできますe2fsckか?そうすれば、

  • ルートファイルシステムe2fsck -f /dev/vdaから実行して修正します。/run
  • e2fsck再起動します。再起動すると 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

次に、それを解凍する必要があります。 の場合.debarと を使用します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解凍した場合データ.tar。日本語の代わりにデータ.tar。xztar zxvf data.tar.gzを使用して解凍します。また、一部のツール (、、、) が不足している場合やar、スペースが不足している場合は、他の GNU/Linux サーバーまたはワークステーションでこれを解凍し、ファイルのみを brokenserver にコピーできます。targzipxzsbin/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))。strace(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)

関連情報