在 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?