在 Linux 系统中挂载外置存储,例如硬盘和网络存储时,需要新建一个空文件夹作为挂载点(例如 /mnt/nas)。在挂载生效前,往这个文件夹写入时是写入到系统所在的文件系统的(即 /mnt)所在的文件系统,如果存在网络或者其他问题造成挂载失败,程序就会往系统存储写文件,造成系统存储空间占用和其它恶性问题



在这里有个解决方法是让挂载点这个文件夹(/mnt/nas)不可写,挂载成功后,权限就会跟随挂载的外置存储,挂载点的权限不会影响成功后的权限。这里使用的是 chattr 命令,可以改变文件属性,添加 不得任意更动文件或目录 的属性。

chattr +i /mnt/nas

示例

/mnt 建立一个 nas 文件夹,并更改所有者为 rikka

sudo mdkir /mnt/nas
sudo chown rikka:rikka /mnt/nas

有以下目录结构

➜  /mnt ls -l /mnt
总用量 26
drwxr-xr-x 13 rikka rikka   13 8月   7 00:12 nas
drwxr-xr-x  2 root  root  4096 4月  17 17:44 rootb

可以看到是可以正常写入的

➜  /mnt mkdir /mnt/nas/writable
➜  /mnt ls -l /mnt/nas
总用量 4
drwxr-xr-x 2 rikka rikka 4096 8月   7 00:09 writable

/mnt/nas 添加不可变更的属性

➜  /mnt sudo chattr +i /mnt/nas

lsattr 查看属性,可以看到已经加上了 i 属性

➜  /mnt lsattr /mnt/
----i---------e---- /mnt/nas
--------------e---- /mnt/rootb

尝试往 nas 写入文件可以看到已经不允许了,用 root 也不能写入了

➜  /mnt mkdir /mnt/nas/writeunable
mkdir: 无法创建目录 “/mnt/nas/writeunable”: 不允许的操作
➜  /mnt sudo mkdir /mnt/nas/writeunable
mkdir: 无法创建目录 “/mnt/nas/writeunable”: 不允许的操作

挂载 NFS 的网络存储

➜  /mnt sudo mount -t nfs 192.168.23.156:/mnt/RAID/disk /mnt/nas

可以看到挂载成功了,再尝试写入文件夹,能够正常写入

➜  /mnt df -h
192.168.23.156:/mnt/RAID/disk  7.0T  2.0T  5.0T   29% /mnt/nas
➜  /mnt mkdir /mnt/nas/folderOnNas
➜  /mnt ls -al /mnt/nas/folderOnNas
总用量 23
drwxr-xr-x  2 rikka rikka  2 8月   7 00:12 .
drwxr-xr-x 13 rikka rikka 13 8月   7 00:12 ..

如果要去掉此属性,降 + 换为 - 即可,即

 sudo chattr -i /mnt/nas

参考

Linux chattr 命令
Best way to prevent the root system filling up when a mount fails?


图版权©所有

最后修改:2023 年 08 月 07 日
如果觉得我的文章对你有用,请随意赞赏