我对 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/srv
or 的目录/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 上的空间。