Перемещение / var, / home в отдельный раздел


59

Я пытаюсь переместить некоторые папки (например, /varи /home) в отдельный раздел после прочтения этого руководства:

3.2.1 Выберите интеллектуальную схему разделов

Мне удалось переместить одну папку успешно, следуя этому руководству.

Тем не менее, это не работает для нескольких папок, и все мои папки сбрасываются в раздел без надлежащих папок.

Я хотел бы установить /var, /homeи /tmpна отдельный раздел; кто-то может направить меня в этом?


Вы сделали дополнительный раздел для каждого из каталогов или только один?
mreithub

@ mreithub Я бы хотел, чтобы в идеале все они хранились в одном разделе и менялись только в зависимости от папки. таким образом, это намного проще для меня, не нужно беспокоиться о пространстве.
toffee.beanns

1
Я не рекомендую размещать /varотдельный раздел. Там нет никакой пользы для этого. Держите всю ОС на одном разделе ( /). Используйте отдельные разделы только для вещей, которые не относятся к ОС - пользовательские данные /home, почтовая спулинга (если у вас есть большой) /var/mail, базы данных, например, /var/lib/mysqlили /srv
Жиль "ТАК - перестать быть злым"

7
@ Жиль " Там нет никакой пользы " ?????? (Может быть, мне нужно больше знаков вопроса). Конечно, есть польза для этого. / в основном статичен. / var почти полностью динамичен. Если вы монтируете / var в отдельном разделе, вы можете монтировать корневой раздел только для чтения. Есть масса ситуаций, когда это хорошая вещь ™.
Auspex

Ответы:


73

1. Сначала вам понадобится некоторое нераспределенное пространство для создания разделов для каждой точки монтирования (/ var, / home, / tmp). Используйте Gparted для этого.

2. Затем вам нужно создать файловые системы для этих разделов (это также можно сделать с помощью Gparted) или использовать:

mkfs.ext4 /dev/sdaX

например, чтобы создать новую файловую систему ext4 на устройстве / dev / sdaX (замените / dev / sdaX на ваше собственное устройство)

3. Смонтируйте новую файловую систему в / mnt

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

4. Перейдите в однопользовательский режим, чтобы не выполнять никаких действий с каталогом во время процесса.

init 1

5. Введите свой пароль root.

6. Резервное копирование данных только в var (не в сам каталог / var)

cd /var
cp -ax * /mnt/var

7. Переименуйте каталог / var после успешной передачи ваших данных.

cd /
mv var var.old

8. Создайте новый каталог var

mkdir var

9. Размонтируйте новый раздел.

umount /dev/sdaX

10. Перемонтируйте его как / var

mount /dev/sdaX /var

11. Отредактируйте файл / etc / fstab, добавив в него новый раздел, где / var будет точкой монтирования, чтобы он автоматически монтировался при загрузке.

/dev/sdaX       /var     ext4    defaults    0 0

12. Повторите шаги 1-11 для / home и / tmp.

13. Наконец, вернитесь в режим многозадачности.

init 5

да, я думал об использовании gparted. Спасибо за ответ. я планирую выделить 30 ГБ места для этих нескольких папок: / home, / tmp, / var /, / opt, / usr /, у вас есть приблизительный показатель того, сколько я должен дать соответственно (для простого хост-сервера) ?
toffee.beanns

1
я смотрел вверх при использовании lvm, это было бы лучше по сравнению с gparted?
toffee.beanns

LVM - это совершенно другая тема. LVM используется в качестве слоя для создания логических томов поверх физических жестких дисков. Gparted - это всего лишь инструмент для создания физических томов LVM.
cioby23

1
На самом деле, cp -ax * /mnt/varэто плохая идея , потому что она будет игнорировать скрытые файлы / каталоги. Предпочитают cp -ax . /mnt/var. (@ cioby23, думаю, вы должны обновить свой ответ)
berbt

6
Пожалуйста, добавьте финал init 5к ответу.
Роберт Поллак

16

Если вы хотите использовать их все в одном разделе, вы можете использовать LVMлибо три простых крепления bind.

Чтобы создать решение на основе привязки вы

  1. создать раздел с файловой системой
  2. перейти в режим восстановления (для некоторых пользователей все еще нужны некоторые папки)
  3. смонтировать его как /mnt/data
  4. Переместить все папки, которые вы хотите переместить. Использование cpи mv 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
    # ...
    

Хотя метод связывания монтажа, вероятно , является лучшим решением практики я отчасти предпочитаю эту, потому что вы не до конца с излишне длинными dfи mountсписками разделов.


1
Что происходит с соответствующими методами, если что-то хочет / var до его монтирования? Я скорее подозреваю, что метод привязки будет чище, но я действительно не знаю.
Auspex

@Auspex В этом отношении не должно быть различий между двумя методами (поскольку afaik все локальные разделы подключаются /etc/fstabодновременно во время загрузки). Перед /mnt/dataмонтированием все ваши символические ссылки будут «мертвыми», поэтому любая попытка чтения / записи на них (и на несуществующих подкаталогах) будет неудачной (с ENOENT, если я правильно помню). С помощью bind-mounts вы получаете почти тот же результат, но программы могут фактически писать в корневой раздел (если они пытаются быть умными в отношении несуществующих каталогов)
mreithub

1
Ну, это не совсем так. Сначала монтируется root, и я специально спросил, потому что в советах Debian «только для чтения root» упоминается возможность процессов, желающих получить доступ к / var до его монтирования. Но в моем случае, когда у меня есть Raspberry Pi и я настроил файловую систему только для чтения на / (поскольку SD-карта продолжает повреждаться при отключении питания машины), вы поощряете меня к тому, что любой из методов будет работать , Ничего не будет записываться в корневую файловую систему, потому что это RO, поэтому любой случай приведет к ошибке.
Auspex

0

В дополнение к процедуре, описанной cioby23, мне также пришлось сделать:

  restorecon -R /var

для запуска sshd.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.