近期有些网友想要了解CentOS跨磁盘移动usr,mount --bind临时挂载要点的相关情况,小编通过整理给您分析,根据自身经验分享CentOS跨磁盘移动usr,mount --bind临时挂载要点有关知识。
CentOS跨磁盘移动/usr,mount --bind临时挂载要点
服务器磁盘告急,第一个被盯上的就是体积最胖的/usr:源码、镜像、日志、缓存全堆在里面,主分区眼看就要撑爆,把/usr搬到新盘又不影响线上业务,是运维夜里最常被拉起来的活。下面这份笔记把CentOS下“跨磁盘移动/usr”+“mount --bind临时挂载”的每一步坑点都标出来,照着敲命令,基本能一次过。
一、先给磁盘“验身”——别让旧盘带坑上路
新盘插上后,第一道口令永远是lsblk -fp,一眼看清分区表、文件系统、UUID,防止把旧RAID盘认错。确认新盘没挂载、没LVM、没残留超级块,再往下走。很多人跳这一步,结果把系统盘直接格式化,哭都来不及。
二、复制/usr:敢用cp -a就敢翻车
rsync -avHAX --info=progress2 /usr/ /mnt/newusr/才是正道。-H把硬链接留住,-A把ACL一起端走,-X把selinux上下文背过去,少一个参数,后面登录就可能卡在“unable to load SELinux policy”。rsync跑完再跑一次,确保零增量,才算数据对齐。
三、为什么要mount --bind而不是直接改/etc/fstab?
/usr被系统提前挂载,initramfs阶段就要读/usr/lib、/usr/bin,如果直接在/etc/fstab写新盘UUID,重启时dracut找不到对应设备,直接掉救援模式。先用mount --bind /mnt/newusr /usr做“软替换”,让旧路径瞬间指向新盘,业务进程无感知,等验证没问题,再把bind写进/etc/fstab,风险拆成两段,回滚也只需一次umount。
四、bind挂载的正确姿势
- 先确认单用户模式或rescue.target,减少占用:
systemctl isolate rescue.target
- 执行绑定:
mount --bind /mnt/newusr /usr
- 马上验证动态库:
ldconfig && ldd /usr/bin/bash | head
如果返回“not found”,说明复制漏了文件,立刻回滚。
- 重新进入默认target:
systemctl default
此时系统跑在新/usr上,旧目录可以留一周做备份,确认无误再格式化旧分区。
五、长期固定:把bind写进/etc/fstab
在文件末尾加一行:
/mnt/newusr /usr none bind,x-systemd.makefs 0 0
注意“x-systemd.makefs”这个冷门选项,它让systemd在挂载前自动fsck,防止新盘有轻微损坏直接拒绝启动。更新完fstab,执行systemctl daemon-reload && mount -a,没有报错再重启。
六、最容易踩的四个雷
- 1. 忘记复制/dev、/proc、/sys——有人把/usr和根分区混为一谈,把/dev也rsync过去,结果新盘里塞满伪文件,inode瞬间炸掉。
- 2. 把原/usr直接rm -rf——bind挂载只是“遮罩”,原目录还在磁盘里占空间,想清理得先umount,再删除旧数据。
- 3. SELinux上下文丢失——复制完记得restorecon -Rv /usr,否则sshd、crond都可能因为无法加载模块而罢工。
- 4. 新盘用了f2fs/exfat——CentOS默认不带这些模块,重启后dracut不认识,直接挂死,选ext4或xfs最稳。
七、回滚预案:一条命令救命
业务高峰发现应用启动不了,立刻:
umount -l /usr && mount -a
系统会重新把旧/usr挂回去,服务秒级复活,给排查争取时间。
八、小结检查单
复制用rsync、验证用ldd、临时用bind、固化写fstab、上下文restorecon、回滚umount -l,六步全部打钩,/usr搬家就能在夜里零工单完成。









