我正在对包含大约 9K 目录的目录进行 Subversion 更新。存储它的文件系统有刚刚超过 4K 的空闲 inode。我看到运行 svn 更新的问题,因为系统用完了 svnclient 创建的 .lock 文件的 inode:
user@host [cwd]$ svn update
svn: Can't open file 'baddir/.svn/lock': No space left on device
user@host [cwd]$ ls -1 | wc -l
8934
user@host [cwd]$ df -h .
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg00-lvol5
2.9G 958M 1.8G 35% /opt
user@host [cwd]$ df -hi .
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/vg00-lvol5
186K 182K 4.3K 98% /opt
user@host [cwd]$ ls -1 | grep -n . | grep baddir
2714:baddir
是的,已经消毒了。:) 似乎正在发生的是 svn 创建了一堆 .lock 文件。我认为问题在于取消链接的速度不够快,因为如果我使用 strace ( strace -o /tmp/deleteme svn update
) 减慢操作速度,则更新会在其他目录上失败。如果没有减慢的 strace,它每次都发生在完全相同的目录上。
现在调整这个文件系统的大小会很不方便(它必须是 ext3 和这个大小,暂时),由于 ext3s 不足,我无法添加 inode。有没有办法让 svn 创建更少的 .lock 文件,或者使用操作系统提供的不需要创建额外文件的实际文件锁定功能?我知道flock 在NFS3 等上不起作用——但我不检查NFS。或者,是否有一些 ext3 可调参数可以用来加速断开链接?
有什么聪明的解决方法吗?它可以运行“svn update ./*”,但这需要永远。比如,几十分钟。我猜想创建 9K SSL 连接比创建一个慢。:)