Назад | Перейти на главную страницу

«Операция запрещена» для файлов размером более 2 ГБ в файловой системе ext4

У меня есть небольшая загадка. У меня есть система Ubuntu 17.04 (обновленная с 16.04 LTS), использующая ext4 в качестве основной файловой системы. Я использовал wget и curl, чтобы загрузить iso на 2,3 ГБ, но я не могу его смонтировать. Фактически, я не могу выполнить с ним никаких операций: md5sum, wc, cat, mount -o loop и т. Д. Без получения сообщения «операция не разрешена». Хотя я могу это "умерить". Я - root, а количество перманентных разрешений в файле - 644. Я не могу выполнить на нем «lsattr» или «chattr» без «операция не разрешена». Я доказал, что это точно связано с размером файла, поскольку я сделал это: dd if = / dev / zero of = / tmp / test.iso bs = 1M count = 2047, и я могу читать test.iso, поскольку он на 1M меньше 2G, но если я изменю его на 2048, я не смогу прочитать файл. Я понимаю, что ext4 имеет минимальный лимит в 16 ГБ, но я намного ниже этого. Кажется, что файлы созданы нормально.

Я провел тщательный поиск перед публикацией, и ничего не связано с моей проблемой. Нет, это не FAT. Это ext4. Я не вижу ошибок в dmesg после доступа к файлу, так как это покажет ошибки apparmour. Я сомневаюсь, что это неизменная завивка, потому что у меня даже нет разрешения на использование lsattr. У меня почти идентичная система Ubuntu 17.04, и она отлично работает (за исключением того, что была установлена ​​свежей, а не путем обновления с 16.04).

Если я напишу в / dev / shm вместо / tmp, я могу md5sum 3 ГБ файла просто отлично ... так что есть что-то, связанное с тем, как он монтируется /. / dev / shm, очевидно, другая точка монтирования, а не 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
...

Я сравнил рабочую систему, разница только в том, что у нее нет uninit_bg, а есть 2 дополнения: 64bit, metadata_csum. Я исследовал эти флаги, и, похоже, они не имеют отношения к проблеме.

У кого-нибудь есть идеи? Если вы хотите увидеть результат какой-либо команды, я с радостью ими поделюсь. Заранее спасибо.

Вот дополнительная информация:

# 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

Это не проблема каталога, поскольку файлы создаются в одном каталоге: я могу создать 2 файла.

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

Несмотря на то, что md5sum, cat и wc говорят «операция не разрешена», кажется, что я могу запустить на них file и stat:

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

Вот стат. Я не вижу заметных отличий.

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

Я не эксперт по apparmor, но вместо того, чтобы проходить курс обучения, я просто отключил его, и вы видите, что это все еще проблема. Я подозревал, что проблема не в этом, потому что я думаю, что «dmesg» должен сообщать о сообщениях о блокировке apparmor, и во время моих тестов не было нового вывода dmesg.

# 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

О, МОЙ БОГ. Что в конечном итоге исправило, так это «apt remove apparmor; reboot». Теперь это работает. Так что, должно быть, это был профиль аппармура. Я не использую его, поэтому что-то в настройках приложения по умолчанию препятствует просмотру файлов более 2G. Кто-нибудь знает, что это может быть за настройка? Мне придется переустановить сейчас, чтобы знать.

Я решил свою проблему. Причина того, что я не могу получить доступ к файлам размером более 2 ГБ, связана с моим антивирусным программным обеспечением (McAfee для Linux - Endpoint Security для предотвращения угроз Linux). Это не было связано с apparmor, фанковыми параметрами файловой системы, разрешениями, дисковым пространством или более старыми файловыми системами.

Вот как я пришел к своему выводу. Действия по устранению неполадок могут быть интересными. Сразу после перезагрузки я могу быстро создать файл 2G и проверить его следующим образом:

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

Через минуту md5sum больше не работает.

Чтобы исключить crontab, я отключил crontab, а также написал однострочный скрипт для вывода 0 при успешном чтении и 1 при неудаче. Обратите внимание, что он прерывается на 40-й секунде (что, скорее всего, указывает не на работу 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

Я добавил только начало файла, так как это все, что мне нужно для его тестирования, так как для чтения всего файла требуется 48 секунд. Я записал вывод ps в /var/log/ps.log. Чтобы выполнить различие в выводе ps путем сравнения того, что изменилось между 39-й и 40-й секундами, я сделал следующее:

# 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

Сравнение выходных сигналов ps между 39-й и 40-й секундами:

# 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

Ну это все! Как только процесс isectpd запустился на 40-й секунде, он отключил доступ к моему файлу размером 2 ГБ.

Однажды я сделал это:

# systemctl stop isectpd

Это начало работать. Очевидно, это бандаж, пока я не узнаю, как разрешить файлы размером> 2 ГБ от McAfee. Если у кого-то есть опыт в этом, не стесняйтесь присоединяться.

Ура.