现在,/tmp中包含一些临时文件。将硬盘驱动器(/dev/sdc1)安装在/tmp上方时,可以看到硬盘驱动器上的文件。装入硬盘驱动器后,/tmp的实际内容如何处理?可以在安装硬盘驱动器时对/tmp的实际内容执行读/写操作吗?

python@lanix / $ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       286G   43G  229G  16% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            3.8G  4.0K  3.8G   1% /dev
tmpfs           766M  1.4M  765M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            3.8G   38M  3.8G   1% /run/shm
none            100M   24K  100M   1% /run/user
/dev/sdb1       7.5G  2.7G  4.9G  35% /mnt
/dev/sdc1       932G  242G  691G  26% /tmp


#1 楼


装入硬盘驱动器后/ tmp的实际内容会怎样?


几乎没有。它们只是从视图中隐藏起来,无法通过正常的文件系统遍历访问。


是的。在“原始” /tmp内部具有打开文件句柄的进程将继续能够使用它们。您还可以通过在其他地方绑定安装/来在其他位置“重新出现”。我希望)能感觉到正在发生的事情。

注意:这不是试图完全正确,也不是对正在发生的事情进行详尽的描述。我应该在机器上创建一个名为me的用户,并在其家中创建一个随机目录,其中带有文件:

# mount -o bind / /somewhere/else
# ls /somewhere/else/tmp  


此时,没有什么不寻常的-它只是一个带有纯文件的纯目录。我将该会话保持为打开状态,并将其cwd放在该测试目录中。

作为根,我创建了一个小文件系统,并将其挂载在/home/me/tmp上。 br />
然后我打开一个新终端,名为me,然后环顾四周: lost+found目录指示ext文件系统的根。而且我失去了写许可权,所以它显然不是原始目录。

回到第一个me会话,让我们看一下它如何看待世界: >
编写没有问题。

me@home $ pwd
/home/me/tmp
me@home $ echo hello > some_file
me@home $ ls  
some_file
me@home $ cat some_file 
hello


原始文件仍然存在,创建的新文件没有问题。

?发生什么事了?

第一个会话通过根目录在其上挂载另一个文件系统之前进入了目录。挂载操作完全不影响原始文件系统。 Shell进程对原始文件系统中的目录具有完全有效的句柄,并且可以继续与其进行交互。这有点像在地毯的安装点下面。

放下安装架后,第二个会话进入目录。因此,它将看到新的空文件系统。并且sysadmin授予了权限,因此它无法使用请求的空间...让我们对其进行修复。

br />
会议1能否从地毯下面逃脱? (越来越发霉了。)

当然!如果会话1从文件系统树中移出文件系统树,则它将失去内部的句柄,并将像其他所有人一样跟随文件系统。在会话#2中,我们恢复了正常。

但是您怎么知道文件没有消失?没有人再看了!

这是绑定安装变得方便的时刻之一。它们使您可以将已安装的文件系统安装到其他位置。

将文件系统绑定到“内部”。很酷的技巧,是吗?)



。只是它们在原始位置不可见/无法访问,安装将它们隐藏在普通目录遍历之外。


我鼓励您尝试一下,这并不复杂一旦您了解了正在播放的“技巧”。而一旦您获得了Got It™,就可以查看并集文件系统以获取更多的地毯信息:-)

不过请注意:一旦启动过程完成,在/tmp/var(或任何核心OS目录)上进行安装确实不是一个好主意。许多应用程序在这些目录中保留状态,如果您在它们周围玩坐骑游戏,可能会感到非常困惑。

评论


这是一个很好的答案-您超越了我的要求。绑定安装的想法也很酷!感谢您的详细回答。干杯。

–用户
15年4月25日在15:35

这是一种神秘地丢失磁盘空间的非常常用的方法。如果在启动脚本中由于某种原因挂载失败,则可以将数据写入根文件系统上的目录。如果随后尝试重新启动,则挂载可能会成功,并且也许没人会注意到(例如,如果文件系统包含tmp文件或日志),但它会占用很多空间。

–丹·谢泼德(Dan Sheppard)
15年4月25日在19:40

@DanSheppard这就是我喜欢将挂载点设置为chmod 000的原因之一。另外,如果关键挂载失败,为什么systemd无法启动。

–赞·山猫
2015年12月26日13:41

您是否也可以-bind在/ home / me上挂载/ home / me而不是“ bind”文件夹?即在地毯上再放一块地毯。还是您必须先卸载fs?

– Jiggunjer
17年1月29日在17:23

@jiggunjer看来,工会选项可以提供帮助。

–hliu
17年6月29日在6:02