今天收到反馈,某些文件同步失败,查看日志发现:

rsync: recv_generator: mkdir "/app/data/ckl/ckli2780581" failed: Too many links (31)
*** Skipping any contents from this failed directory ***
  1. 进入相关目录建立文件:

cd /app/data/ckl/
mkdir vd

报错一样:

failed: Too many links

2.查看目录

ls /app/data/ckl | wc -l
31998

目录个数竟然这么多,有可能是文件系统的限制

3.查看文件系统

 df -lhT
Filesystem                       Type  Size  Used Avail Use% Mounted on
/dev/sda1                        ext3  7.9G  4.9G  2.7G  65% /

果然是ext3


大概如下:

nclude/linux/ext2_fs.h:#define EXT2_LINK_MAX           32000
include/linux/ext3_fs.h:#define EXT3_LINK_MAX           32000

为什么说31998个呢?这是因为mkdir创建一个目录时,目录下默认就会创建两个子目录的,一个是.目录(代表当前目录),另一个是..目录(代表上级目录)。这两个子目录是删除不掉的,“ rm . ” 会得到“rm: cannot remove `.' or `..'”的提示。所以32000-2=31998。

解决:

ext4 对目录个数没有限制

挂载一块新盘,将目录建立连接

脚本如下:

#!/bin/bash
CUR_DAY=`date +%Y%m%d`
SRC_DIR=/app
DST_DIR=/data

fdisk /dev/vdc <<EOF
	d               
	n             
	p               
	1  
	1              
               
	t              
	83             
	w  
EOF  

echo
echo "star create vg and lv..."
pvcreate /dev/sdc1
if [ $? -eq 0 ];then
	vgcreate data-volume /dev/vdc1
	if [ $? -eq 0 ];then
		lvcreate -L 99G -n s1_data data-volume
	else
		echo "lv create failed!"
		exit 1
else
	echo "vg create failed !"
fi
mkfs -t ext4 /dev/data-volume/s1_data

mount /dev/data-volume/s1_data ${DST_DIR}
cp -a ${SRC_DIR}/data ${DST_DIR}
mv ${SRC_DIR}/data ${SRC_DIR}/data_bak/
ln -s ${DST_DIR}/data/ ${SRC_DIR}/data