在 $HOME 空间耗尽后,我发现我的一些脚本失败了,留下了损坏的文件。我将通过一个例子来解释:
我正在使用 Ubuntu 12.04,/ 分区是 ext4,$HOME 位于同一分区,并且加密主目录选项(安装时询问)处于活动状态。
当没有更多可用空间时,如果我尝试创建一个文件
$ touch last-successful
touch: cannot touch `last-successful': No space left on device
甚至想了一下,我发现文件已经创建,但是元数据由于某种原因无法读取(问号)。
该文件也无法使用。无法读取/写入。
$ ls -lah
ls: cannot access last-successful: No such file or directory
drwxrwxr-x 2 user1 user1 4.0K Oct 28 12:10 .
drwxrwxr-x 3 user1 user1 4.0K Oct 28 12:01 ..
-????????? ? ? ? ? ? last-successful
-rw-rw-r-- 1 user1 user1 189 Jul 12 12:09 README
即使有了可用空间,也不能更改或删除它(并且错误消息没有多大意义),请看一下:
$ echo "hi" >> last-successful
bash: last-successful: File exists
$ rm last-successful
rm: cannot remove `last-successful': No such file or directory
rm 之后,我仍然看到与之前相同的列表(上面有文件“last-successful”和问号)
只有重新启动后,文件才会被列出并且不带问号。
$ ls -lah
drwxrwxr-x 2 user1 user1 4.0K Oct 28 12:10 .
drwxrwxr-x 3 user1 user1 4.0K Oct 28 12:01 ..
-rw-rw-r-- 1 user1 user1 0 Oct 27 00:02 last-successful
-rw-rw-r-- 1 user1 user1 189 Jul 12 12:09 README
但读/写仍然不起作用:
$ cat last-successful
cat: last-successful: Input/output error
$ echo "hi" > last-successful
bash: last-successful: Input/output error
我只能将其删除(这次有效),然后一切似乎又开始正常工作。
这里是我的挂载点的列表:
$ mount
/dev/sda1 on / type ext4 (rw,errors=remount-ro)
...
/home/user1/.Private on /home/user1 type ecryptfs (ecryptfs_check_dev_ruid,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_unlink_sigs,ecryptfs_sig=49b949f48cc35f84,ecryptfs_fnek_sig=66c15b8e5a4f2c6b)
有人能告诉我这是怎么回事吗?与 eCryptfs 有关吗?
答案1
这确实是 eCryptfs 的问题,因为 eCryptfs 处理磁盘已满的情况的方式不同。请看一下:
https://bugs.launchpad.net/ubuntu/+source/ecryptfs-utils/+bug/957843
此错误已修复。内核更新应该可以解决该问题。