如何将 srv 目录移动到另一个分区?

如何将 srv 目录移动到另一个分区?

安装 Ubuntu(10.04)时,我选择了/家安装在单独的分区中。我现在想移动/srv目录放入同一分区。

我发现的问题是 Ubuntu 没有/家分区本身内的目录。它只是将帐户目录放在分区中,并将其挂载到/家。所以我不能轻易地移动/srv文件夹放入分区。

我怎么能够:

  1. 将这些帐户目录移动到分区内的主文件夹中
  2. 使其成为新的文件夹默认/家文件夹。
  3. 同上/srv文件夹,或者我将来选择的任何文件夹。

答案1

安装完成后/home,您可以执行绑定挂载例如 挂载/home/srv/srv

mount --bind /home/srv /srv

在这种情况下,相同的文件将出现在/home/srv和下/srv

或者你可以做一个移动坐骑移至。/home/srv/srv

mount --move /home/srv /srv

在这种情况下,/home/srv挂载后将不再存在。卸载/srv后将/home/srv再次出现。

答案2

如果我理解正确的话,你想做的事不是确切地可能 - 安装不是这样进行的。(尽管你可以假装,如 Ignacio 的回答中所述)

您可以将每个分区视为自己的文件系统。例如,假设您有一个分区sda1,您将使用它作为整个文件系统的根目录,并且sda2您将使用它来保存主目录。正如您现在所知,上的文件系统sda1包含顶级目录、、、bin等,而上的文件系统包含顶级目录、等(或您用户的主目录的任何名称)。层次结构可能如下所示:libusrhomesda2user1user2

sda1
|-箱
| |-(程序)
|-首页
|-lib
| |-(图书馆)
|-usr
| |-箱
| |-lib
| |-分享

sda2
|-用户1
| |-文件
|-用户2
| |-文件

而且正如你所知,为了挂载文件系统,你必须指定文件系统(当然)和目录,挂载点。执行此操作时,您指定的目录将成为分区文件系统根目录的名称。例如,操作系统启动时做的第一件事之一就是挂载sda1(在此示例中)目录/。这使/上的文件系统根目录的名称成为 。现在您可以将上的目录sda1称为,例如。在启动过程的稍后阶段,操作系统将挂载上,这意味着是文件系统根目录的名称。要引用上的目录,您可以写。等等。binsda1/binsda2/home//home/sda2user1sda2/home/user1

现在听起来,您想要的是/srv/为分区文件系统中的某个子目录分配一个名称(如),而不是为文件系统的根目录分配一个名称。但mount这样做不行。我不确定这是否有技术原因,或者这只是 Linux 内核维护人员的设计决定。最重要的是,为了使分区上的任何内容都可以访问,您必须为文件系统的根目录分配一个名称。但是,一旦您这样做了,您就可以使用选项使分区文件系统中的子目录可以通过其他名称访问--bindmount这可能是您的最佳选择。

答案3

在您的情况下,/home 被视为“挂载点”,可以通过编辑 /etc/fstab 来更改挂载点的名称

答案4

将分区挂载为/data,添加目录/data/home/data/srv

现在您可以简单地使用符号链接/home->/data/home/srv-> /data/srv

sudo ls -s /data/home /home
sudo ls -s /data/srv  /srv

或者使用mount --bind/etc/fstab/这样将是:

sudo /data/home /home none bind 0 0
sudo /data/srv  /srv  none bind 0 0

我认为这就是您所需要的。如果 fstab 条目需要不同的选项,请纠正。

多年来我一直使用符号链接方法,它似乎工作得很好。也许跟踪链接会对性能造成影响,但我没有注意到。不过,bind 方法可能更好,我打算继续使用这种方法(假设我没有忽略问题/缺点)。

相关内容