如何更改挂载点

如何更改挂载点

我对 Linux 上的挂载/取消挂载不是很深入,所以我的问题是:

df -h得到以下概述:

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             323M  306M     0 100% /
tmpfs                 502M     0  502M   0% /lib/init/rw
udev                  497M  116K  497M   1% /dev
tmpfs                 502M     0  502M   0% /dev/shm
/dev/sda9              47G  181M   44G   1% /home
/dev/sda8             368M   12M  338M   4% /tmp
/dev/sda5             8,3G  1,1G  6,8G  14% /usr
/dev/sda6             2,8G  433M  2,2G  17% /var

我使用这台机器作为 Web 服务器,所有与 Web 相关的内容都位于/srv/.因为这是/我的磁盘空间不足的一部分。我看到/home有 44G 可用网络空间,这对我来说纯粹是胡说八道。所以我想/home不作为自己的分区(而不是 的一部分/),而是/srv作为自己的分区,抓住 所消耗的空间/home。所以之后df -h应该看起来像这样(/home替换为/srv):

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             323M  306M     0 100% /
tmpfs                 502M     0  502M   0% /lib/init/rw
udev                  497M  116K  497M   1% /dev
tmpfs                 502M     0  502M   0% /dev/shm
/dev/sda9              47G  181M   44G   1% /srv
/dev/sda8             368M   12M  338M   4% /tmp
/dev/sda5             8,3G  1,1G  6,8G  14% /usr
/dev/sda6             2,8G  433M  2,2G  17% /var

需要做什么才能到达这里?

答案1

由于 中 有足够的空间/home,因此将所有内容从 中移动到/srv/home,然后(可选)将其中的内容移动/home到根分区中。

如果您不介意几分钟的停机时间,最简单的解决方案是移动/srv到更大的分区并对其进行符号链接:

mv /srv /home
ln -s /home/srv /

如果您确实想移动/home到根分区,则需要进行几次重命名。我假设没有名为/home/srvor 的目录/srv/srv

mv /srv home
mkdir /srv
mount --move /home /srv
mv /srv/acme … /home/
mv /srv/srv/* /srv
rmdir /srv/srv

最后(如果您不使用符号链接方法)编辑/etc/fstab以更改安装点:在以 开头的行上/dev/sda9 /home,替换/home/srv

答案2

在执行任何操作之前,您必须找到一个位置来保存 /home 当前占用的 180 MB 数据。我建议将当前的 /dev/sda9 重新分区为 2 个 G/home和 42 个/srv.

接下来你就得有点棘手了。这一切最好在单用户模式下完成,这样只有 root 可以登录,并且/home在您移动它时不会遇到有人尝试访问的麻烦。

/var 中有足够的空间,因此我们将其用作临时保存空间: mkdir /var/tmp/oldhome

cd /home

`tar -cvf - ./ | ( cd /var/tmp/oldhome && tar -xvf - )

现在我们已经/home备份到某个地方了,同时我们重新分区/dev/sda9为 2 个演出/dev/sda9和 42 个演出/dev/sda10

一旦完成重新分区和创建新文件系统(我假设您知道如何执行此操作),您将需要编辑/etc/fstab.

在那里的某个地方你会看到一行字,上面写着

/dev/sda9 /home ext3 defaults 0 2

假设您已经制作了/dev/sda9两个分区中较小的一个,则可以保留该行不变;你只需要添加

/dev/sda10 /srv ext3 defaults 0 2

直接在下面。

添加这些行后,只需输入

mount /home ; mount /srv

并检查df -h以确保两个分区都已安装。

然后替换/home中的数据:

cd /var/tmp/oldhome

tar -cvf - ./ | ( cd /home && tar -xvf - )

在多用户模式下重新启动系统,一切都应该正常。

答案3

作为一种快速但不是很漂亮的解决方案,您可以将一个较少使用的磁盘上的目录重新安装到下面的某个位置/srv,然后将某些内容移动到那里以清理一些/srv适当的空间。

阅读--bind有关man mount.它归结为类似的事情mount --bind /some/spare/dir /busy/dir/mountpoint。它可以在任何现代 Linux 上运行。

假设你有/srv/some/stuff.

  • mkdir /home/offload/some/stuff— 这是在 44G 可用空间分区上
  • mv /srv/some/stuff /srv/some/previous-stuff— 暂时释放名字
  • mount --bind /home/offload/some/stuff /srv/some/stuff- 现在一些/东西在另一个分区上!
  • mv /srv/some/previous-stuff/* /srv/some/stuff— 将内容恢复到原来的名称,释放 /srv 上的空间。

相关内容