将/ var,/ home移动到单独的分区


59

阅读本指南后,我尝试将一些文件夹(例如/var/home)移动到单独的分区:

3.2.1选择智能分区方案

按照指南,我能够成功移动一个文件夹。

但是,它似乎不适用于多个文件夹,并且我所有的文件夹都没有适当的文件夹转储到分区中。

我想安装/var/home/tmp到单独的分区; 有人可以指导我吗?


您是否为每个目录或一个目录都做了一个额外的分区?
mreithub 2014年

@mreithub我希望它最好全部存储在同一分区中,并且仅随文件夹而变化。这样对我来说就简单得多,而不必担心空间。
toffee.beanns 2014年

1
我不建议放置/var单独的分区。没有好处。将整个操作系统保持在单个分区(/)上。仅对非操作系统使用单独的分区-用户数据位于/home,邮件后台处理(如果您有一个大的)/var/mail,数据库位于例如/var/lib/mysql或的情况下/srv,…
Gilles

7
@吉尔斯“ 没有好处 ” ?????? (也许我需要更多的问号)。当然有好处。/通常是静态的。/ var几乎完全是动态的。如果将/ var挂载在单独的分区上,则可以以只读方式挂载根分区。在很多情况下,这都是一件好事。
Auspex

Answers:


73

1.首先,您需要一些未分配的空间来为每个安装点(/ var,/ home,/ tmp)创建分区。为此使用Gparted。

2.然后,您需要为这些分区创建文件系统(也可以使用Gparted完成)或使用:

mkfs.ext4 /dev/sdaX

例如在/ dev / sdaX设备上创建一个新的ext4文件系统(用您自己的设备替换/ dev / sdaX)

3.将新文件系统挂载在/ mnt下

mkdir /mnt/var        
mount /dev/sdaX /mnt/var

4.进入单用户模式,以便在此过程中目录上没有rw活动

init 1

5.输入您的root密码。

6.仅备份var中的数据(不备份/ var目录本身)

cd /var
cp -ax * /mnt/var

7.成功传输数据后,重命名/ var目录。

cd /
mv var var.old

8.新建目录

mkdir var

9.卸载新分区。

umount /dev/sdaX

10.将其重新挂载为/ var

mount /dev/sdaX /var

11.编辑/ etc / fstab文件以包括新分区,其中/ var是挂载点,以便它将在引导时自动挂载。

/dev/sdaX       /var     ext4    defaults    0 0

12.对/ home和/ tmp重复步骤1-11。

13.最后返回多任务处理模式。

init 5

是的,我当时正在考虑使用gparted。感谢您的回答。我打算为这几个文件夹/ home,/ tmp,/ var /,/ opt,/ usr /留出30gb的空间,您是否粗略了解我应该相应地提供多少(对于一个简单的托管服务器) ?
toffee.beanns 2014年

1
我一直在寻找使用lvm,与gparted相比会更好吗?
toffee.beanns 2014年

LVM是一个完全不同的主题。LVM用作在物理硬盘之上创建逻辑卷的层。Gparted只是创建LVM物理卷的工具。
cioby23,2014年

1
实际上,这cp -ax * /mnt/var是一个坏主意,因为它将忽略隐藏的文件/目录。更喜欢cp -ax . /mnt/var。(@ cioby23,我认为您应该更新答案)
berbt

6
init 5在答案中添加最终答案。
罗伯·波拉克

16

如果要在同一分区上全部使用它们,则可以使用一个LVM或三个简单的绑定安装。

要创建基于绑定的解决方案,您需要

  1. 用文件系统创建分区
  2. 进入救援模式(单个用户仍需要一些文件夹)
  3. 挂载为 /mnt/data
  4. 移动所有要移动的文件夹。使用cpmv dir dir.old可能会更安全,但是由于我在安装后进行了此操作,因此对我来说并不重要。

    mv /home /mnt/data/
    mv /var  /mnt/data/
    
  5. 在fstab中创建适当的绑定安装条目,例如我有

    UUID=01234567-89abc-def0-1234-567890abcde /mnt/data         ext4          noatime,nodiratime,relatime                           0       0
    
    # Binds
    /mnt/data/opt                             /opt              none          bind                                                  0       0
    /mnt/data/home                            /home             none          bind                                                  0       0
    /mnt/data/usr                             /usr              none          bind                                                  0       0
    
  6. 重启


在下面的mount(8)手册页中nodiratime说:If noatime option is set, this option is not needed.包括它是否有冗余优势?
brannerchinese

5

我个人要么使用@Fabian的绑定安装解决方案,要么使用符号链接:

  1. /etc/fstab为新分区创建条目(用于blkid获取新分区的正确UUID,并且不要忘记mkdir /mnt/data):

    UUID=01234567-89abc-def0-1234-567890abcde  /mnt/data  ext4  defaults  0 0
    
  2. 使用mount -a或类似方式挂载新分区

  3. 将原始文件夹移动到新分区:

    mv /var /mnt/data/
    mv /home /mnt/data/
    # ... (you get the point)
    
  4. 创建符号链接

    ln -s /mnt/data/var /var
    ln -s /mnt/data/home /home
    # ...
    

尽管bind-mount方法可能是最佳实践解决方案,但我还是比较喜欢此方法,因为这样不会导致不必要的冗长dfmount分区列表。


1
如果在挂载之前需要/ var,则相应的方法会发生什么?我宁可怀疑bind方法会更干净,但我真的不知道。
Auspex

@Auspex在这方面,这两种方法之间应该没有什么区别(因为afaik /etc/fstab在启动过程中同时安装了所有本地分区)。在/mnt/data挂载之前,所有符号链接都将变为“死”状态,因此对它们(以及不存在的子目录)的任何读/写尝试都将失败(如果我没记错的话,使用ENOENT)。使用bind-mount,您可以获得几乎相同的结果,但是程序实际上可能会写入根分区(如果它们试图对不存在的目录更加精明)
mreithub '16

1
好吧,这并非完全正确。根先被挂载,我特别询问是因为Debian的“只读根”建议提到了进程想要在挂载/ var之前访问它的可能性。但是在我的情况下,如果我有Raspberry Pi,并且在/上设置了只读文件系统(因为当机器断电时SD卡不断损坏),那么您鼓励我这两种方法都可以工作。由于它是RO,因此不会写入根文件系统,因此任何一种情况都将导致错误。
Auspex

0

除了cioby23给出的过程之外,我还必须做:

  restorecon -R /var

为了使sshd启动。

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.