今天收到反馈,某些文件同步失败,查看日志发现:
rsync: recv_generator: mkdir "/app/data/ckl/ckli2780581" failed: Too many links (31) *** Skipping any contents from this failed directory ***
进入相关目录建立文件:
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
本文出自 “运维菜鸟” 博客,请务必保留此出处http://ckl893.blog.51cto.com/8827818/1767570
原文地址:http://ckl893.blog.51cto.com/8827818/1767570