我想将其存储/var
在单独的分区中/
。正确的设置方法是什么?
答案1
首先准备一个新的分区(例如带有parted
和mkfs
)。
假设分区是/dev/sda5
挂载新分区:
mkdir /var2
mount /dev/sda5 /var2
同步当前变量:
rsync -a /var/ /var2
将条目添加到 /etc/fstab
/dev/sda5 /var ext4 defaults 2 2
重启。
如果您碰巧需要返回旧的 /var,只需注释掉 fstab 中的条目即可。
答案2
在虚拟服务器上配置新的 /var 分区
当我接管由雇主的托管公司配置的新虚拟服务器时,根文件系统中没有足够的可用空间。幸运的是,他们使用了逻辑卷管理器 (LVM)细分虚拟磁盘,并且有足够的可用空间来创建新卷。我为var
和创建了额外的逻辑卷home
,它们曾经是根文件系统中的常规目录。由于虚拟服务器提供商没有提供类似 KVM 的界面,我可以通过该界面以单用户模式访问服务器,因此我使用了与 Aleksander 概述的方法非常相似的方法(此答案除了 LVM 特定的命令外,还包含有关恢复磁盘空间的额外详细信息)。
使用 LVM 创建新的 /var 文件系统
为新文件系统创建一个逻辑卷var
,挂载它(使用临时目录)并将文件从当前文件系统复制/var
到新文件系统:
# Create a new 60GB logical volume in the `VolGroup00` group called `var`.
sudo lvcreate -L 60GB -n var VolGroup00
# Create an ext4 filesystem on this new `var` volume.
sudo mkfs.ext4 /dev/VolGroup00/var
# Mount this filesystem at a temporary mount-point.
sudo mkdir /var.new
sudo mount /dev/VolGroup00/var /var.new
由于正在运行的进程将使文件/var
保持打开状态并处于使用状态,因此不能简单地将目录树移动到新文件系统。递归 ( -r
) 将文件从当前/var
分区复制到新文件系统,同时保留文件属性和扩展属性 (-a, --archive
选项)。谨慎的用户可能会首先创建一个LVM 快照在复制之前先阅读当前卷的内容,但对于这个问题来说,这涉及太多题外的细节。
sudo cp -ra /var/ /var.new/
或者,可以使用 复制文件rsync
,并使用其-a, --archive
选项保留时间戳、所有权、模式等,以及其-X, --xattrs
选项保留扩展属性,例如 AppArmor 和 SELinux 使用的安全标签:
sudo rsync -raX /var/ /var.new/
更新文件系统表
/var
将以下行添加到 ,配置新的文件系统以用作 的新挂载点/etc/fstab
。请注意,用作传递编号(最后一个字段),以便在一定次数的重启后0
不会自动检查文件系统( )。fsck
/dev/mapper/VolGroup00-var /var ext4 defaults 0 0
由于无法切换到单用户模式,请重新启动计算机以将此新卷用作/var
。
删除临时挂载点
机器重新启动后,将挂载新的文件系统,/var
以便可以安全地删除临时挂载点:
sudo rmdir /var.new
从根文件系统恢复磁盘空间
旧/var
文件仍将占用根分区上的空间,但在挂载另一个文件系统时,它们不易访问/var
(新文件系统使用/var
目录作为其挂载点来“屏蔽”它们)。使用临时挂载点挂载根文件系统,以便原始目录的内容/var
可通过备用路径访问。
sudo mkdir /old-root
sudo mount /dev/mapper/VolGroup00-root /old-root/
sudo rm -rf /old-root/var/*
sudo umount /old-root/
sudo rmdir /old-root/