У меня есть небольшая загадка. У меня есть система 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. Если у кого-то есть опыт в этом, не стесняйтесь присоединяться.
Ура.