我有点困惑。我有一个 Ubuntu 17.04 系统(从 16.04 LTS 升级而来),使用 ext4 作为其主文件系统。我使用 wget 和 curl 下载了一个 2.3GB 的 iso,但我无法挂载它。事实上,我无法对它执行任何操作:md5sum、wc、cat、mount -o loop 等……否则会收到“操作不允许”的提示。但我可以“rm”它。我是 root,文件的权限是 644。我无法对它执行“lsattr”或“chattr”,否则会收到“操作不允许”的提示。我已经证明它与文件大小完全相关,因为我这样做了:dd if=/dev/zero of=/tmp/test.iso bs=1M count=2047,我可以读取 test.iso,因为它比 2G 少 1M,但如果我将其更改为 2048,我将无法读取该文件。我知道 ext4 的最低限制是 16GB,但我的容量远远低于这个数字。文件似乎创建得很好。
在发帖之前我进行了彻底的搜索,没有任何内容与我的问题相关。不,它不是 FAT。它是 ext4。访问文件后,我在 dmesg 中没有看到任何错误,因为这会显示 apparmour 错误。我怀疑它不是一个不可变的权限,因为我甚至没有权限对其进行 lsattr。我有一个几乎相同的 Ubuntu 17.04 系统,它运行良好(除了它是全新安装的,而不是通过从 16.04 升级而安装的)。
如果我写入 /dev/shm 而不是 /tmp,我可以很好地对 3GB 文件进行 md5sum......因此这与它的挂载 / 方式有关。/dev/shm 显然是一个不同的挂载点而不是 ext4。
# ls -l asm8.iso -rw-r--r-- 1 root root 2253135872 1 月 15 日 20:27 asm8.iso
#md5sum asm8.iso md5sum:asm8.iso:操作不允许
# strace -f md5sum asm8.iso ... open("asm8.iso", O_RDONLY) = -1 EPERM(操作不允许) ...
# lsattr asm8.iso lsattr:读取 asm8.iso 上的标志时不允许操作
# 安装 |grep " / " /dev/mapper/asci—vg-root on / 类型 ext4 (rw,relatime,errors=remount-ro,data=ordered)
# tune2fs -l /dev/mapper/asci--vg-root ... 文件系统功能:has_journal ext_attr resize_inode dir_index filetype needs_recovery scope flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize 文件系统标志:signed_directory_hash 文件系统状态:干净 文件系统操作系统类型:Linux ...
我比较了工作系统,唯一的区别是它没有 uninit_bg,并且有 2 个附加项:64bit、metadata_csum。我研究了这些标志,它们似乎与问题无关。
有人有什么想法吗?如果您想查看任何命令的输出,我很乐意与您分享。提前致谢。
以下是额外信息:
# df -h 文件系统大小已使用可用使用率%安装于 udev 7.9G 0 7.9G 0%/dev tmpfs 1.6G 114M 1.5G 8% /运行 /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% /运行/锁定 tmpfs 7.9G 0 7.9G 0%/sys/fs/cgroup /dev/sda1 472M 116M 332M 26% /boot tmpfs 1.6G 0 1.6G 0%/运行/用户/999 tmpfs 1.6G 0 1.6G 0%/运行/用户/1003 tmpfs 1.6G 0 1.6G 0%/运行/用户/0 tmpfs 1.6G 0 1.6G 0%/运行/用户/1008
# df -i 文件系统 Inodes IUsed IFree IUse% 挂载于 udev 2046118 419 2045699 1%/dev tmpfs 2051789 712 2051077 1% /运行 /dev/mapper/asci--vg-root 66035712 3469883 62565829 6% / tmpfs 2051789 1 2051788 1%/ dev / shm tmpfs 2051789 5 2051784 1% /运行/锁定 tmpfs 2051789 16 2051773 1%/sys/fs/cgroup /dev/sda1 124928 315 124613 1% /启动 tmpfs 2051789 5 2051784 1%/运行/用户/999 tmpfs 2051789 5 2051784 1%/运行/用户/1003 tmpfs 2051789 5 2051784 1%/运行/用户/0 tmpfs 2051789 5 2051784 1%/运行/用户/1008
# 猫 /etc/fstab #/etc/fstab:静态文件系统信息。 # # 使用“blkid”打印一个 # 设备;这可以与 UUID= 一起使用,作为命名设备的更可靠方式 # 即使添加和删除磁盘也可以正常工作。请参阅 fstab(5)。 # # /dev/mapper/asci--vg-root / ext4 错误=remount-ro 0 1 # 安装期间 /boot 位于 /dev/sda1 上 UUID=20926db6-5e54-4907-912a-5fe996f45adc /boot ext2 默认值 0 2 /dev/mapper/asci--vg-swap_1 无 交换 sw 0 0 /dev/fd0 /media/floppy0 自动 rw,用户,noauto,exec,utf8 0 0
这不是一个目录问题,因为文件在同一个目录中创建得很好:我可以创建这 2 个文件。
根@asci /tmp # dd if=/dev/zero of=/tmp/file2047.iso bs=1M count=2047 2047+0 条记录 2047+0 条记录 已复制 2146435072 字节(2.1 GB,2.0 GiB),6.46013 秒,332 MB/s 根@asci /tmp # dd if=/dev/zero of=/tmp/file2048.iso bs=1M count=2048 2048+0 条记录 2048+0 条记录 已复制 2147483648 字节(2.1 GB,2.0 GiB),60.2936 秒,35.6 MB/s 根@asci /tmp # ls -ls /tmp/文件*.iso 2096132 -rw-r--r-- 1 root root 2146435072 1 月 19 日 05:52 /tmp/file2047.iso 2097156 -rw-r--r-- 1 root root 2147483648 1 月 19 日 05:53 /tmp/file2048.iso
尽管 md5sum、cat 和 wc 都显示“操作不允许”,但似乎我可以对它们运行文件和统计:
# 文件 *.iso file2047.iso:数据 file2048.iso:可写,常规文件,无读取权限
这是统计数据。我没有看到明显差异。
# 统计 *.iso 文件:file2047.iso 大小:2146435072 块:4192264 IO 块:4096 常规文件 设备:fd00h/64768d Inode:7380361 链接:1 访问:(0644 / -rw-r--r--)Uid:(0 / root)Gid:(0 / root) 访问时间:2018-01-19 05:52:30.925760162 +0100 修改:2018-01-19 05:52:30.921760136 +0100 更改:2018-01-19 05:52:30.921760136 +0100 出生日期:- 文件:file2048.iso 大小:2147483648 块:4194312 IO 块:4096 常规文件 设备:fd00h/64768d Inode:7380363 链接:1 访问:(0644 / -rw-r--r--)Uid:(0 / root)Gid:(0 / root) 访问时间:2018-01-19 05:52:36.765797317 +0100 修改:2018-01-19 05:53:37.034180299 +0100 更改:2018-01-19 05:53:37.034180299 +0100 出生日期:-
我不是 apparmor 专家,但我没有经历学习过程,而是直接禁用了它,你可以看到它仍然是一个问题。我怀疑这不是问题,因为我认为“dmesg”应该报告 apparmor 阻止消息,而在我的测试期间没有新的 dmesg 输出。
# 停止服务 根@asci /tmp # 服务 apparmor 拆卸 * 卸载 AppArmor 配置文件 ...完毕。 根@asci /tmp # 更新-rc.d -f apparmor 删除 根@asci /tmp # wc -c 文件 2048.iso wc:file2048.iso:操作不允许
天哪。最后修复它的方法是“apt remove apparmor; reboot”。现在它起作用了。所以它一定是 apparmor 配置文件。我不使用它,所以默认 apparmor 设置中的某些内容阻止查看超过 2G 的文件。有人知道那是什么设置吗?我现在必须重新安装才能知道。
答案1
我的问题已经解决了。无法访问超过 2GB 的文件的原因是我的防病毒软件(McAfee for Linux - Endpoint Security for Linux Threat Prevention)。不是因为 apparmor、奇怪的文件系统选项、权限、磁盘空间或较旧的文件系统。
这是我得出结论的过程。故障排除步骤可能很有趣。重新启动后,我可以快速创建一个 2G 文件并像这样探测它:
根@asci /tmp # dd if=/dev/zero of=/tmp/file2049.iso bs=1M count=2049 2049+0 条记录 2049+0 条记录 已复制 2148532224 字节(2.1 GB,2.0 GiB),2.05888 秒,1.0 GB/s 根@asci /tmp #md5sum file2049.iso 4555da35a7064cc499ba1e3f6fa1993a 文件2049.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 "操作不允许"; sleep 1;date >> /var/log/ps.log; ps -efww >> /var/log/ps.log; done 2018 年 1 月 19 日星期五 18:57:28 CET - 0 2018 年 1 月 19 日星期五 18:57:30 CET - 0 2018 年 1 月 19 日星期五 18:57:31 CET - 0 2018 年 1 月 19 日星期五 18:57:32 CET - 0 2018 年 1 月 19 日星期五 18:57:33 CET - 0 2018 年 1 月 19 日星期五 18:57:34 CET - 0 2018 年 1 月 19 日星期五 18:57:35 CET - 0 2018 年 1 月 19 日星期五 18:57:36 CET - 0 2018 年 1 月 19 日星期五 18:57:37 CET - 0 2018 年 1 月 19 日星期五 18:57:38 CET - 0 2018 年 1 月 19 日星期五 18:57:39 CET - 0 2018 年 1 月 19 日星期五 18:57:40 CET - 1 2018 年 1 月 19 日星期五 18:57:41 CET - 1 2018 年 1 月 19 日星期五 18:57:42 CET - 1 2018 年 1 月 19 日星期五 18:57:43 CET - 1 2018 年 1 月 19 日星期五 18:57:44 CET - 1
我只 dd 了文件的开头,因为这就是我测试它所需要的全部内容,因为读取整个文件需要 48 秒。我将 ps 输出记录到 /var/log/ps.log。为了通过比较第 39 秒和第 40 秒之间的变化来对 ps 输出进行差异分析,我执行了以下操作:
# cat ps.log |grep "2018 年 1 月 19 日星期五 18:57:39 CET" -A10000 |grep "2018 年 1 月 19 日星期五 18:57:40 CET" -B10000 > /tmp/ps39 # cat ps.log |grep "2018 年 1 月 19 日星期五 18:57:40 CET" -A10000 |grep "2018 年 1 月 19 日星期五 18:57:41 CET" -B10000 > /tmp/ps40 # CD /tmp
比较第 39 秒和第 40 秒的 ps 输出:
# 差异 ps39 ps40 2018 年 1 月 19 日 星期五 18:57:40 CET 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 > 根 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 秒启动,它就会禁用对我的 2GB 文件的访问。
有一次我这样做了:
# 系统控制停止 isectpd
它开始起作用了。显然,在我找到如何允许 McAfee 处理大于 2GB 的文件之前,这只是权宜之计。如果有人有这方面的经验,请随时提出意见。
干杯。