Problema com o inode órfão

1

Estou usando uma máquina virtual em um servidor que não consigo acessar e estou tendo o sistema de arquivos montado em modo somente leitura:

# dmesg
.... 
[2.535658] EXT4-fs (vda): Couldn't remount RDWR because of unprocessed orphan inode list.  Please umount/remount instead

Então, tentei executar:

# 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!

Saída de 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

Saída de 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)

É claro que não posso atualizar o e2fsck, pois tenho um sistema de arquivos somente para leitura. Como posso escapar do loop?

    
por Manu 29.05.2018 / 13:50

2 respostas

0

Parece que você tem um /run ramdisk (sistema de arquivos tmpfs) isso é leitura / gravação montada. Você pode baixar o mais atual e2fsck lá? Você deve então poder

  • Execute e2fsck -f /dev/vda de /run e corrija seu sistema de arquivos raiz.
  • Reinicie. Isso eliminará seu recém-baixado e2fsck , porque os sistemas de arquivos tmpfs são reinicializados quando você reinicia. Mas o seu sistema de arquivos raiz deve ser lido / escrito agora.
  • Baixe e2fsck novamente, no sistema de arquivos raiz.

De fato, se você puder remontar o sistema de arquivos raiz depois de consertá-lo (sem reinicializar), então você deve conseguir copiar e2fsck para /sbin (ou onde quer que seja).

    
por 29.05.2018 / 16:31
0

A resposta depende de como esse erro surgiu?

Isso pode acontecer se você inicializar algum kernel mais novo, e ele atualizou seu sistema de arquivos ext4 para uma versão mais nova, que seu kernel padrão não suporta totalmente. Em caso afirmativo, a solução pode ser tão simples quanto reinicializar novamente nesse kernel mais recente e desmontar de forma limpa o sistema de arquivos.

No entanto, se você "não fez nada" e o erro apareceu sozinho, isso pode indicar uma corrupção aleatória do hardware. Nesse caso, seria prudente primeiro fazer backup de todos os dados de que você precisa (na verdade, é sempre uma boa ideia fazer backup de material). Você pode usar scp / sftp para fazer backup de todos os dados importantes para sua estação de trabalho ou, se houver algum outro servidor disponível, fazer backup completo do sistema, por exemplo:

otherserver# nc -l -p 8080 > brokenserver-backup.tar.gz
brokenserver# tar zcf - / | nc otherserver.example.com 8080

Depois de ter um backup funcional, você precisa obter um novo e2fsck , como sugerido pelo @ G-Man. No entanto, como você descobriu, você precisa da versão estaticamente compilada / vinculada do e2fsck, ou isso causará um erro sobre a falta de bibliotecas dinâmicas. Aqui está como fazer isso.

Para fazer isso, primeiro você precisa baixar a versão estática. Ainda bem que isso pode ser para qualquer distribuição GNU / Linux. Eu prefiro os de link :

su
cd /run
wget http://ftp.de.debian.org/debian/pool/main/e/e2fsprogs/e2fsck-static_1.44.2-1~bpo9+1_amd64.deb

Como alternativa, você pode fazer o download em sua estação de trabalho e usar o sftp client como Filezilla para copiá-lo para o diretório /run em arquivos quebrados servidor.

Então, você precisa descompactá-lo. Para .deb , você usa ar e 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

Observação : se ar descompactado data.tar. gz em vez de data.tar. xz , você usaria tar zxvf data.tar.gz para descompactar. Além disso, se você perder algumas das ferramentas ( ar , tar , gzip , xz ) ou ficar sem espaço, você pode descompactar isso em qualquer outro servidor GNU / Linux ou estação de trabalho e copiar apenas o arquivo. sbin/e2fsck.static file para brokenserver.

então, você finalmente consegue fsck:

brokenserver:/run# chmod 755 /run/sbin/e2fsck.static
brokenserver:/run# ./sbin/e2fsck.static /dev/vda

Observação: se você receber um erro "Permissão negada" , provavelmente é porque o seu /run está montado noexec (não em seu caso, mas foi, você poderia consertá-lo com mount -oremount,exec /run , ou porque você baixou arquitetura errada (por exemplo, amd64 binário no antigo i386 - veja arch (1) ) . strace (1) lhe daria mais informações no final, como:

execve("/run/sbin/e2fsck.static", ["/run/sbin/e2fsck.static"], [/* 22 vars */]) = -1 ENOEXEC (Exec format error)

ou

execve("/run/sbin/e2fsck.static", ["/run/sbin/e2fsck.static"], [/* 22 vars */]) = -1 EACCES (Permission denied)
    
por 07.06.2018 / 15:11