立即定位需看错误码:含“Permission denied (13)”指向路径则分源/目标端,“No space left on device (28)”直指磁盘耗尽;用--dry-run -v观察open/mkstemp前缀,配合namei -l查目录x权限、df -i查inode、getenforce和findmnt验SELinux与挂载状态。

麒麟OS执行rsync同步大量文件时提示权限不足或空间满,需立即定位是源端读取受阻、目标端写入失败,还是磁盘真实耗尽——错误信息中明确含“Permission denied (13)”指向源或目标路径,“No space left on device (28)”则直接锁定空间问题。
快速区分权限不足发生在哪一端
运行同步命令时追加--dry-run -v参数,观察报错行前缀:【open "/src/file"】表示源端读取失败;【mkstemp "/dst/file"】或Permission denied (13)出现在目标路径,则是目标端写入权限或属性设置问题。
若报错未带具体路径,仅显示some files could not be transferred,优先检查目标端——这类模糊提示90%以上源于目标目录无法创建临时文件、设置时间戳或修改属主。
用rsync -av --delete --dry-run /src/ user@host:/dst/ 2>&1 | head -20截取前20行错误,比全量日志更易聚焦关键线索。
排查源端读取权限(Permission denied 指向源路径)
方法一:逐层验证目录执行权限
执行namei -l /path/to/source,输出中任一级目录权限若不含x(例如drw-r--r--),即为阻断点——Linux要求从根目录到文件的每一级父目录都必须有x权限才能进入访问。
方法二:确认实际运行用户身份
定时任务中运行rsync时,crontab默认不加载~/.bashrc,可能缺失umask导致新建文件权限过严;在crontab中显式添加umask 022并用绝对路径调用rsync(如/usr/bin/rsync)可规避此问题。
方法三:检查KYSEC安全机制干扰
麒麟V10默认启用KYSEC,它可能拦截非授权进程的文件访问。执行cat /proc/sys/kernel/kylin_sec,若返回1,临时关闭验证:echo 0 | sudo tee /proc/sys/kernel/kylin_sec。注意:该操作需管理员权限,且仅用于排查,验证后应恢复。
排查目标端写入权限与空间(Permission denied 或 No space left)
第一步:确认目标目录基础权限
执行ls -ld /dst/path,若输出中无w(如dr-xr-xr-x),说明当前用户无写权限;若属主为root而你不是root,直接sudo rsync会改变解压后文件属主,更推荐sudo chown $USER:$USER /dst/path再同步。
第二步:检查磁盘真实使用率
不要只看df -h,执行df -i确认inode是否耗尽——小文件极多时,即使空间充足也会因inode满而报No space left on device;若Use%列显示100%,用find /dst/path -xdev -type f | head -20快速查看大文件分布。
第三步:绕过不可写子目录(仅限非关键路径)
若目标目录下存在系统保留子目录(如.Trash-1000)导致同步中断,添加--exclude='.Trash*' --exclude='lost+found'跳过,避免整个任务失败。
验证SELinux与挂载限制(麒麟V10特有)
执行getenforce,若返回Enforcing,需检查SELinux布尔值:getsebool rsync_full_access。若为off,运行sudo setsebool -P rsync_full_access 1——【-P参数必须加上,否则重启失效】。
检查源或目标路径所在分区是否只读挂载:findmnt -T /path/to/dir,若TYPE列显示ext4但OPTIONS含ro,说明挂载时被设为只读,需联系系统管理员修复磁盘或重新挂载。

















