有没有更快的方法来删除目录,然后简单地提交
rm -r -f *directory*
?我问这个是因为我们每天的跨平台构建非常庞大(例如每个构建 4GB)。所以一些机器上的硬盘经常耗尽空间。
这就是我们的 AIX 和 Solaris 平台的情况。
也许在这些平台上有用于目录删除的“特殊”命令?
粘贴编辑(将我自己的单独答案移动到问题中):
我通常想知道为什么 'rm-r-f' 如此缓慢。'rm' 只需要修改 '..' 或 '.' 文件来取消分配文件系统条目。
类似于
mv *directory* /dev/null
那就太好了.
对于从文件系统中删除目录,rm 是您最快的选择。在 linux 上,有时我们在 ramdisk 中进行构建(几 GB),它的删除速度非常令人印象深刻:) 您也可以尝试不同的文件系统,但是在 AIX / Solaris 上您可能没有很多选择...
如果你的目标是有目录 $dir 空现在,你可以重命名它,并删除它后从后台 / cron 作业:
mv "$dir" "$dir.old"
mkdir "$dir"
# later
rm -r -f "$dir.old"
另一个技巧是为 $dir 创建一个单独的文件系统,当你想删除它时,你只需重新创建文件系统。
# initialization
mkfs.something /dev/device
mount /dev/device "$dir"
# when you want to delete it:
umount "$dir"
# re-init
mkfs.something /dev/device
mount /dev/device "$dir"
我忘了这一招的来源,但它的工作原理:
EMPTYDIR=$(mktemp -d)
rsync -r --delete $EMPTYDIR/ dir_to_be_emptied/
至少在 AIX 上,您应该使用逻辑卷管理器 LVM。我们所有的系统都将所有物理硬盘驱动器到一个卷组中,然后从中创建一个大的 honkin 文件系统。
这样,您可以随意向计算机添加物理设备,并将文件系统的大小增加到所需的任何大小。
我见过的另一个解决方案是在每个文件系统上分配一个垃圾目录,并使用mv
和find
cron
作业来解决空间问题。
基本上,有一个cron
作业,每十分钟运行一次并执行:
rm -rf /trash/*
rm -rf /filesys1/trash/*
rm -rf /filesys2/trash/*
然后,当您希望回收该文件系统上的特定目录时,请使用以下命令:
mv /filesys1/overnight /filesys1/trash/overnight
并且,在接下来的十分钟内,您的磁盘空间将开始恢复。filesys1/overnight
目录将立即可供使用,甚至在废弃版本开始被删除之前。
垃圾目录与您要删除的目录位于同一文件系统上,这一点很重要,否则您手上有大量的复制 / 删除操作,而不是相对快速的移动。
rm -r directory
的工作原理是通过directory递归 depth-first,删除文件,并在备份过程中删除目录。它必须这样做,因为您不能删除非空的目录。
冗长无聊的细节:每个文件系统对象都由文件系统中的一个 inode 表示,该 inode 具有文件系统范围的平面 inode 数组。[1] 如果您只是删除了目录而没有先删除其子级,则子级将保持分配状态,但没有指向它们的任何指针。(fsck
在运行时会检查这种东西,因为它代表文件系统损坏。)
[1] 对于每个文件系统来说,这可能不是严格的,并且可能有一个文件系统按照你描述的方式工作。它可能需要像垃圾收集器一样。但是,我所知道的所有常见的act像 fs 对象都是 inode 拥有的,目录是名称 / inode 编号对的列表。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(51条)