“Operação não permitida” em arquivos com mais de 2 GB no sistema de arquivos ext4

1

Eu tenho um pouco de mistério. Eu tenho um sistema Ubuntu 17.04 (atualizado de 16.04 LTS) usando o ext4 como seu sistema de arquivos principal. Eu usei wget e curl para baixar uma iso de 2,3 GB, mas não consigo montá-lo. Na verdade, não posso fazer nenhuma operação: md5sum, wc, cat, mount -o loop, etc ... sem obter uma "operação não permitida". Eu posso "rm", no entanto. Eu sou root, e as perms no arquivo são 644. Eu não posso fazer um "lsattr" nem "chattr" nele sem "operação não permitida". Eu provei que é exatamente relacionado ao tamanho do arquivo como eu fiz isso: dd if = / dev / zero de = / tmp / test.iso bs = contagem 1M = 2047 e eu sou capaz de ler test.iso como é 1M menos de 2G, mas se eu mudar para 2048, não consigo ler o arquivo. Eu entendo que o ext4 tem um limite mínimo de 16GB, mas estou bem abaixo disso. Os arquivos parecem ser criados muito bem.

Eu fiz uma pesquisa completa antes de postar e nada está relacionado ao meu problema. Não, não é FAT. É ext4. Não vejo erros no dmesg após acessar o arquivo, pois isso mostraria erros de apparour. Eu duvido que seja um perm imutável, pois eu nem tenho permissão para interpretá-lo. Eu tenho um sistema Ubuntu 17.04 quase idêntico e funciona bem (exceto que foi instalado fresco em vez de via upgrade de 16.04).

Se eu escrevo para / dev / shm ao invés de / tmp, eu posso md5sum um arquivo de 3GB muito bem ... então há algo relacionado à maneira como ele é montado /. / dev / shm é obviamente um ponto de montagem diferente e não ext4.

# ls -l asm8.iso
-rw-r--r-- 1 root root 2253135872 Jan 15 20:27 asm8.iso
# md5sum asm8.iso
md5sum: asm8.iso: Operation not permitted
# strace -f md5sum asm8.iso
...
open("asm8.iso", O_RDONLY)              = -1 EPERM (Operation not permitted)
...
# lsattr asm8.iso
lsattr: Operation not permitted While reading flags on asm8.iso
# mount |grep " / "
/dev/mapper/asci--vg-root on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
# tune2fs -l /dev/mapper/asci--vg-root

...
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash
Filesystem state:         clean
Filesystem OS type:       Linux
...

Eu comparei o sistema de trabalho, e a única diferença é que ele não tem uninit_bg e tem 2 extras: 64 bits, metadata_csum. Eu pesquisei essas bandeiras e elas não parecem relevantes para o problema.

Alguém tem alguma ideia? Se você quiser ver a saída de qualquer comando, vou compartilhá-los com prazer. Agradecemos antecipadamente.

Aqui está a informação extra:

# df -h
Filesystem                 Size  Used Avail Use% Mounted on
udev                       7.9G     0  7.9G   0% /dev
tmpfs                      1.6G  114M  1.5G   8% /run
/dev/mapper/asci--vg-root  992G  643G  299G  69% /
tmpfs                      7.9G     0  7.9G   0% /dev/shm
tmpfs                      5.0M     0  5.0M   0% /run/lock
tmpfs                      7.9G     0  7.9G   0% /sys/fs/cgroup
/dev/sda1                  472M  116M  332M  26% /boot
tmpfs                      1.6G     0  1.6G   0% /run/user/999
tmpfs                      1.6G     0  1.6G   0% /run/user/1003
tmpfs                      1.6G     0  1.6G   0% /run/user/0
tmpfs                      1.6G     0  1.6G   0% /run/user/1008
 # df -i
Filesystem                  Inodes   IUsed    IFree IUse% Mounted on
udev                       2046118     419  2045699    1% /dev
tmpfs                      2051789     712  2051077    1% /run
/dev/mapper/asci--vg-root 66035712 3469883 62565829    6% /
tmpfs                      2051789       1  2051788    1% /dev/shm
tmpfs                      2051789       5  2051784    1% /run/lock
tmpfs                      2051789      16  2051773    1% /sys/fs/cgroup
/dev/sda1                   124928     315   124613    1% /boot
tmpfs                      2051789       5  2051784    1% /run/user/999
tmpfs                      2051789       5  2051784    1% /run/user/1003
tmpfs                      2051789       5  2051784    1% /run/user/0
tmpfs                      2051789       5  2051784    1% /run/user/1008
# cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#                
/dev/mapper/asci--vg-root /               ext4    errors=remount-ro 0       1
# /boot was on /dev/sda1 during installation
UUID=20926db6-5e54-4907-912a-5fe996f45adc /boot           ext2    defaults        
0       2
/dev/mapper/asci--vg-swap_1 none            swap    sw              0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto,exec,utf8 0       0

Não é um problema de diretório, pois os arquivos são criados no mesmo diretório: Eu posso criar os 2 arquivos.

root@asci /tmp
# dd if=/dev/zero of=/tmp/file2047.iso bs=1M count=2047
2047+0 records in
2047+0 records out
2146435072 bytes (2.1 GB, 2.0 GiB) copied, 6.46013 s, 332 MB/s

root@asci /tmp
# dd if=/dev/zero of=/tmp/file2048.iso bs=1M count=2048
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 60.2936 s, 35.6 MB/s

root@asci /tmp
# ls -ls /tmp/file*.iso
2096132 -rw-r--r-- 1 root root 2146435072 Jan 19 05:52 /tmp/file2047.iso
2097156 -rw-r--r-- 1 root root 2147483648 Jan 19 05:53 /tmp/file2048.iso

Mesmo que md5sum, cat e wc digam "operação não permitida", parece que posso executar o arquivo e declará-los:

# file *.iso
file2047.iso: data
file2048.iso: writable, regular file, no read permission

Aqui está stat. Eu não vejo diferenças notáveis.

# stat *.iso
  File: file2047.iso
  Size: 2146435072      Blocks: 4192264    IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 7380361     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-01-19 05:52:30.925760162 +0100
Modify: 2018-01-19 05:52:30.921760136 +0100
Change: 2018-01-19 05:52:30.921760136 +0100
 Birth: -
  File: file2048.iso
  Size: 2147483648      Blocks: 4194312    IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 7380363     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-01-19 05:52:36.765797317 +0100
Modify: 2018-01-19 05:53:37.034180299 +0100
Change: 2018-01-19 05:53:37.034180299 +0100
 Birth: -

Eu não sou um especialista em aparelhagem, mas em vez de passar por uma curva de aprendizado, eu simplesmente a desativei e você pode ver que ainda é um problema. Eu suspeitava que não era o problema porque eu acho que o "dmesg" deveria reportar mensagens de bloqueio de apparmor e não havia nenhuma nova saída do dmesg durante meus testes.

# service apparmor stop

root@asci /tmp
# service apparmor teardown
 * Unloading AppArmor profiles
   ...done.

root@asci /tmp
# update-rc.d -f apparmor remove

root@asci /tmp
# wc -c file2048.iso
wc: file2048.iso: Operation not permitted

OMG. O que finalmente corrigido foi "apt remove apparmor; reboot". Agora funciona. Então deve ter sido um perfil aparente. Eu não o uso, então algo nas configurações padrão do apparmor está impedindo a visualização de arquivos com mais de 2G. Alguém tem alguma idéia de qual configuração pode ser? Vou ter que reinstalar agora para saber.

    
por Mike Weller 16.01.2018 / 00:59

1 resposta

2

Eu resolvi meu problema. O motivo para não conseguir acessar arquivos com mais de 2 GB é devido ao meu software antivírus (McAfee para Linux - Endpoint Security para Linux Threat Prevention). Não foi devido a apparmor, opções do sistema de arquivos, permissões, espaço em disco ou sistemas de arquivos antigos.

Aqui está como cheguei à minha conclusão. As etapas de solução de problemas podem ser interessantes. Imediatamente após uma reinicialização, posso criar rapidamente um arquivo 2G e testá-lo da seguinte forma:

root@asci /tmp
# dd if=/dev/zero of=/tmp/file2049.iso bs=1M count=2049
2049+0 records in
2049+0 records out
2148532224 bytes (2.1 GB, 2.0 GiB) copied, 2.05888 s, 1.0 GB/s

root@asci /tmp
# md5sum file2049.iso
4555da35a7064cc499ba1e3f6fa1993a  file2049.iso

Dentro de um minuto, o md5sum não funciona mais.

Para descartar os crontabs, desabilitei o crontab e também escrevi um script de 1-liner para dar saída 0 ao ler com sucesso e 1 se não tiver sucesso. Observe que ele quebra no 40º segundo (indicando provavelmente não um trabalho cron):

# while [ 1 == 1 ]; do echo -n "'date' - ";dd if=asm8.iso bs=1M count=30 2>&1|grep -c "Operation not permi"; sleep 1;date >> /var/log/ps.log; ps -efww >> /var/log/ps.log; done
Fri Jan 19 18:57:28 CET 2018 - 0
Fri Jan 19 18:57:30 CET 2018 - 0
Fri Jan 19 18:57:31 CET 2018 - 0
Fri Jan 19 18:57:32 CET 2018 - 0
Fri Jan 19 18:57:33 CET 2018 - 0
Fri Jan 19 18:57:34 CET 2018 - 0
Fri Jan 19 18:57:35 CET 2018 - 0
Fri Jan 19 18:57:36 CET 2018 - 0
Fri Jan 19 18:57:37 CET 2018 - 0
Fri Jan 19 18:57:38 CET 2018 - 0
Fri Jan 19 18:57:39 CET 2018 - 0
Fri Jan 19 18:57:40 CET 2018 - 1
Fri Jan 19 18:57:41 CET 2018 - 1
Fri Jan 19 18:57:42 CET 2018 - 1
Fri Jan 19 18:57:43 CET 2018 - 1
Fri Jan 19 18:57:44 CET 2018 - 1

Eu só adiciono o início do arquivo, já que é tudo que preciso para testá-lo, já que leva 48 segundos para ler a coisa toda. Eu registrei a saída ps para /var/log/ps.log. Para fazer um diff na saída do ps comparando o que mudou entre o 39º e o 40º segundo, eu fiz isso:

# cat ps.log |grep "Fri Jan 19 18:57:39 CET 2018" -A10000 |grep "Fri Jan 19 18:57:40 CET 2018" -B10000 > /tmp/ps39
# cat ps.log |grep "Fri Jan 19 18:57:40 CET 2018" -A10000 |grep "Fri Jan 19 18:57:41 CET 2018" -B10000 > /tmp/ps40
# cd /tmp

Comparando as saídas de ps entre o 39º e o 40º segundo:

# diff ps39 ps40
 Fri Jan 19 18:57:40 CET 2018
266c266
 root      2412  1276 97 18:57 ?        00:00:19 /opt/isec/ens/threatprevention/bin/isectpd
275,276c275,278
 root      2632  2412  1 18:57 ?        00:00:00 /opt/isec/ens/threatprevention/bin/isectpd
> root      2635  2412 11 18:57 ?        00:00:00 /opt/isec/ens/threatprevention/bin/isectpd
> root      2663  2518  0 18:57 pts/1    00:00:00 ps -efww

Então é isso! Uma vez que o processo do isectpd foi iniciado no 40º segundo, ele desativou o acesso ao meu arquivo de 2 GB.

Depois que fiz isso:

# systemctl stop isectpd

Começou a funcionar. Obviamente, este é um bandaid até eu descobrir como permitir que > Arquivos de 2 GB da McAfee. Se alguém tiver alguma experiência com isso, sinta-se à vontade para entrar em contato.

Felicidades.

    
por 20.01.2018 / 05:23