如何(安全地)将/ tmp移到另一个卷?


17

今天,该/tmp目录已填满正在工作的计算机。问题是,它不是很大的根分区上。为了解决这个问题,同事在/new/tmp其他地方创建了一个目录,将所有内容复制到新目录,删除了原始目录/tmp并建立了符号链接/tmp -> /new/tmp

当他复制文件时(真的,这是别人,不是我!),他没有使用,-a因此下面每个文件的所有者/new/tmp都是root。此外,他没有设置/new/tmp目录的权限,因此它是默认的0755。这不会造成麻烦,甚至没有进行调整,所有权位也无法将计算机恢复到可接受的工作状态。我最终不得不删除所有内容/tmp并重新启动。

/tmp目录包含各种套接字和管道等,因为一堆人通过VNC运行Gnome,而我使用的screen是它自己的管道。

有没有安全的方法将/tmp目录移动到正在运行的系统上的其他卷?我不确定要使一切正常运行我会做些什么。我对管道和插座会发生什么特别好奇。

Answers:


20

在“客户端”计算机上,安全的移动方法/tmp是重新启动。在这里,所谓客户端,是指运行将套接字放入的程序的任何程序,/tmp尤其是X服务器和屏幕。

新的/tmp肯定需要具有正确的权限(1777),否则您就无法希望拥有一个正常运行的系统。

对于/tmp,您几乎无法复制任何文件。这是因为在大多数情况下,将内容放入/tmp文件中的程序会打开。如果复制文件,则复制内容,但是程序仍会打开旧文件。您也许可以使用调试器(ptrace)来访问它们,但是这比重新启动要复杂得多,并且对于许多程序而言,无论如何,它们都会使它们崩溃。

如果您/tmp的电脑已满,并且要切换到新的状态,则需要重新启动所有打开了文件的程序。由于这意味着要重新启动X和屏幕会话,因此它并不比重新启动更好。

您应该能够切换到新程序,但可以通过使用联合安装将现有的打开文件保留在原位。(原理是合理的,但是我从未尝试过,因此可能存在我无法预料的问题。)这是在Linux上执行此操作的一种方法。

  1. /tmp除了几个手动选择的大文件外,保留所有现有文件。
  2. 创建一个/tmp.new(模式1777)。
  3. 公开/tmp其他路径:mount --bind / /.root.only。这是必要的,因为下一步将消失/tmp。可能有不同的联合安装实现,不需要此步骤。
  4. /.root.only/tmp/tmp.new安装在上/tmp。这样,/tmp将在其中写入创建的新文件/tmp.new,但是在/.root.only/tmp中也可以看到其中的文件/tmp。一种可能性是 的unionfs保险丝unionfs-fuse /tmp.new:/.root.only/tmp /tmp

如果您不想进入联合安装根目录(例如,因为它在您的平台上不可用,或者因为它太麻烦了),至少不要删除旧目录。移动它,以便正在运行的程序将继续使用旧目录,而新程序将使用新目录。(当然,/tmp除非您设置TMPDIR或以其他方式告诉他们在哪里看,否则新程序将无法通过套接字或管道与旧程序进行通信。)

mv /tmp /tmp.old && mkdir /tmp

您介意说明如何通过重新引导来保持/ tmp的新位置吗?
FoxDeploy

@FoxDeploy为此输入一个条目/etc/fstab
吉尔斯(Gills'SO-不要邪恶)'

您能否详细说明一下?
FoxDeploy

@FoxDeploy我不确定您在这里问什么。如果要/tmp位于根文件系统之外的其他位置,则将其列出在中/etc/fstab,就像要在引导时挂载的任何其他文件系统一样。如果这不是您要的内容,则应提出一个具有足够上下文的新问题。
吉尔(Gilles)'所以
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.