我有一台存储大量数据的服务器,我保存了许多嵌套目录,其中包含数百万个文件。
当尝试将一个大目录(~700GB)从一个磁盘移动到另一个磁盘时,我收到一个错误:
mv /media/storage3/dir /media/storage4/
"No space left on device"
另外,尝试在磁盘上创建一个小的 txt 文件也不起作用:
Error opening file '/media/storage4/Untitled Document': No space left on device
我在网上查了很多选项,没有一个有效。
df -h 输出:
Filesystem Size Used Avail Use% Mounted on
/dev/sdg7 77G 9.2G 64G 13% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
udev 32G 4.0K 32G 1% /dev
tmpfs 6.3G 1.4M 6.3G 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 32G 76K 32G 1% /run/shm
none 100M 48K 100M 1% /run/user
/dev/sdg6 19G 6.7G 11G 39% /home
/dev/sdb1 440G 278G 140G 67% /var
/dev/sda1 2.8T 2.0T 764G 73% /media/storage1
/dev/sdh1 2.8T 1.6T 1.3T 56% /media/storage2
/dev/sdi1 2.8T 1.7T 1.2T 60% /media/storage3
/dev/sdf1 2.8T 876G 1.9T 32% /media/storage4
df -i 输出:
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sdg7 5079040 514215 4564825 11% /
none 8242449 2 8242447 1% /sys/fs/cgroup
udev 8239750 611 8239139 1% /dev
tmpfs 8242449 696 8241753 1% /run
none 8242449 5 8242444 1% /run/lock
none 8242449 4 8242445 1% /run/shm
none 8242449 28 8242421 1% /run/user
/dev/sdg6 1220608 218613 1001995 18% /home
/dev/sdb1 29310976 12863877 16447099 44% /var
/dev/sda1 858436804 41630853 816805951 5% /media/storage1
/dev/sdh1 1356948436 38728057 1318220379 3% /media/storage2
/dev/sdi1 1217505624 34748869 1182756755 3% /media/storage3
/dev/sdf1 2048962648 36308921 2012653727 2% /media/storage4
在网上阅读,人们说类似的问题是由于访问大量文件而发生的,将 fs.inotify.max_user_watches 设置为高数量可能会解决它,我将其从 8192 增加到 1000000 但没有帮助。
答案1
运行以下命令:
lsof -s | sort -nrk 7 | head
你会看到像这样的输出:
firefox 2997 j 52rr REG 252,0 10485760 5505182 /some/path
firefox 2997 j 50rr REG 252,0 10485760 5505182 /some/path
firefox 2997 j 3rr REG 252,0 10485760 5505182 /some/path
firefox 2997 j 39rr REG 252,0 10485760 5505182 /some/path
firefox 2997 j 31ur REG 252,0 10485760 5505182 /some/path
笔记;上面只是一个示例,您需要根据自己的判断来查找空间使用情况。
关于输出:
- 第 7 列是正在使用的空间的大小。
- 第 4 列是文件描述符。
您可以删除文件描述符中的内容以重新获得该空间:
cat /dev/null > /proc/2997/fd/50
显然这会破坏该文件描述符上的所有数据。
答案2
您可以尝试使用 tar 复制所有数据,然后将其删除:
cd /media/storage3/; tar cfp - ./dir | ( cd /media/storage4; tar xfp - )
这将保留所有所有权、权限和链接
答案3
我本来会使用这些rsync -avrz storage3 storage4
文件,然后删除这些文件,但我遇到了另一个问题,如果您使用的是 Linux (Ubuntu),那么为什么您要使用 NTFS 文件系统来共享这些共享,那么我会选择 ext4 或 ReiserFS、ButterFS。如果这些共享位于 Windows 机器上,请尝试使用 robocopy 将这些文件从 Windows 移动到 Windows,这在这方面非常出色。 Robocopy 的工作方式主要类似于 rsync。
rsync 的手册页:http://linux.die.net/man/1/rsync
robocopy 的帮助页面:https://technet.microsoft.com/en-us/library/cc733145.aspx
适用于 Linux 的 3g-ntfs 驱动程序支持页面:www.tuxera.com/community/open-source-ntfs-3g/
3g-ntfs 常见问题解答:www.tuxera.com/community/ntfs-3g-faq/
我怀疑您在 Ubuntu 安装中使用的 NTFS 文件系统驱动程序中应该修复某些内容,您使用的是哪个 NTFS 发行版,您是如何安装磁盘的,它们是本地连接到您所在的 ubuntu 盒子还是已安装使用 SAN 中的 iSCSI?
此故障排除不仅仅是“我无法移动它们位于 NTFS 上的文件,并且我正在运行 ubuntu 来移动它们”。