Всем привет!
 Несколько месяцев назад получил алерт от Zabbix, что на почтовом сервере осталось менее 20% места на основном разделе.
 Т.к. сервер виртуализирован с помощью VmWare ESXi, то добавить объем жесткому диску не проблема.
 Но надо правильно приготовить:)
 Решил повторить опыт и поделиться что и как я делал.
Исходные данные:
- FreeBSD 12.1
 - Исходный размер жесткого диска — 25GB
 - Swap раздел — 1GB
 - Новый размер диска — 50GB
 
Смотрим помощью gpart что у нас есть:
# gpart show
=>      40  52428720  ada0  GPT  (25G)
        40      1024     1  freebsd-boot  (512K)
      1064  50330624     2  freebsd-ufs  (24G)
  50331688   2097072     3  freebsd-swap  (1.0G) Так же посмотрим информацию о SWAP:
# swapinfo -h Device 1K-blocks Used Avail Capacity /dev/ada0p3 1048536 0B 1.0G 0%
Записываем все, выключаем сервер и накидываем объем диска.
 Загружаемся.
 Если у вас реальный сервер на котором крутится процессы использующие запись в своп, то лучше все делать в однопользовательском (Single Mode) режиме.
 Проверим что у нас добавилось:
# gpart show ada0
=>      40  52428720  ada0  GPT  (50G) [CORRUPT]
        40      1024     1  freebsd-boot  (512K)
      1064  50330624     2  freebsd-ufs  (24G)
  50331688   2097072     3  freebsd-swap  (1.0G) Получаем сообщение, что GPT таблица имеет статус CORRUPT, чиним:
# gpart recover ada0
# gpart show ada0
=>       40  104857520  ada0  GPT  (50G)
         40       1024     1  freebsd-boot  (512K)
       1064   50330624     2  freebsd-ufs  (24G)
   50331688    2097072     3  freebsd-swap  (1.0G)
   52428760   52428800        - free -  (25G) Видим, что в конце нам стало доступно 25GB свободного места, чтобы добавить их ко второму разделу, нужно удалить swap.
 Отключаем swap:
# swapoff /dev/ada0p3
Удалим SWAP раздел, в моем случае это 3 раздел ada0
 
# gpart delete -i 3 ada0
Проверяем, что у нас осталось:)
# gpart show ada0
=>       40  104857520  ada0  GPT  (50G)
         40       1024     1  freebsd-boot  (512K)
       1064   50330624     2  freebsd-ufs  (24G)
   50331688   54525872        - free -  (26G) Видим, что у нас остался один раздел (слайс), swap уничтожен.
HandBook советует следующие операции по изменению размера разделов производить при размонтированных файловых системах, на боевых серверах крайне рекомендую к этому прислушаться!
Отключаем безопасность GEOM:
# sysctl kern.geom.debugflags=16
Решаем, что для swap-раздела оставляем 2GB, а основной раздел увеличиваем до 48GB (25GB+25GB-2GB)
# gpart resize -i 2 -s 48G -a 4k ada0
-i 2 — указывает на раздел
Еще раз проверяем:
# gpart show ada0
=>       40  104857520  ada0  GPT  (50G)
         40       1024     1  freebsd-boot  (512K)
       1064  100663296     2  freebsd-ufs  (48G)
  100664360    4193200        - free -  (2.0G) Создадим на оставшемся свободном месте раздел для подкачки:
# gpart add -t freebsd-swap -a 4k ada0 ada0p3 added
# gpart show ada0
=>       40  104857520  ada0  GPT  (50G)
         40       1024     1  freebsd-boot  (512K)
       1064  100663296     2  freebsd-ufs  (48G)
  100664360    4193200     3  freebsd-swap  (2.0G) Все на месте, как мы и планировали, осталось расширить файловую систему,
 при этом еще раз получаем предупреждение, что мы планируем делать изменения на примонтированной файловой системе и рекомендуют сделать резервную копию данных перед этой операцией:
# growfs /dev/ada0p2 Device is mounted read-write; resizing will result in temporary write suspension for /. It's strongly recommended to make a backup before growing the file system. OK to grow filesystem on /dev/ada0p2, mounted on /, from 24GB to 48GB? [yes/no]
Подключаем файл подкачки:
# swapon /dev/ada0p3
Проверяем размер файловой системы:
# df -h Filesystem Size Used Avail Capacity Mounted on /dev/ada0p2 46G 1,3G 42G 3% / devfs 1,0K 1,0K 0B 100% /dev
Наличие свопа:
# swapinfo -h Device 1K-blocks Used Avail Capacity /dev/ada0p3 2096600 0B 2.0G 0%
Возвращаем на место настройки GEOM
# sysctl kern.geom.debugflags=0
Собственно все.