> Нашел тему на этом форуме но вопрос так и не раскрыт.
> https://www.opennet.ru/openforum/vsluhforumID1/57150.html было достаточно тем где вопрос был раскрыт, но найти будет нелегко
Так как с GPT проще, рассмотрим как это в случае с MBR.
для начала man growfs - на данный момент утилита может расширять только НЕсмонтированные
FS.
Значит прежде мы должны расширить партицию, если есть за счет чего, если нет, то расширить
слайса, если есть за счет чего.
Схематично можно нарисовать так:
схема A
------------
HDD
-----------------------
MBR
-----------------------
1 Slice
--------
partition 1 ("a")
partition 2 ("b") swap
partition 3 ("d")
free A
partition 4 ("e")
free B
-----------------------
freeX for slice
-----------------------
END HDD
-----------------------
Из верхней схемы видно что мы можем:
- расширить "d" за счет "free A"
- расширить "e" за счет "freeA" и "free B"
Но мы можем расширить и сам слайс за счет "freeX"
Понятно что если у нас между партициями "a", "b", "d", "e" нет свободного места gap'ов,
и они занимают весь слайс, то сначала нужно расширить слайс: fdisk или gpart.
Схематично это:
схема B
------------
HDD
------------
slice 1
--
part 1
...
part 8
------------
free space
------------
end of HDD
------------
Мы видим что кроме slice 1 есть свободное место, которое можно отдать под slice2,3,4
или расширить slice 1 командной fdisk/gpart.
После расширения объема слайса, у нас будет free space после part 8 и мы ее можем
легко расширить используя bsdlabel/gpart.
И только после этого можно использовать gpart, но FS на part8 НЕ ДОЛЖНА быть
смонтирована!
Вот примерно какая последовательность в общем случае.
Вернемся к схеме A, там между партициями есть свободное место и партиции "d" и "e"
можно расширить за счет FreeA и FreeB не изменяя слайс.
Используя bsdlabel расширяем "d" за счет FreeA, затем выполняем growfs для "d",
аналогично для "e".
Ньюанс, партицию "e" можно расширить "вверх" за счет FreeA, и вниз за счет FreeB.
Расширение "вниз", те (то есть) используя free space идущее ПОСЛЕ партиции,
я производил без проблем.
А вот про использование свободного места до FS - не помню, вроде тоже делал
за счет swap'а.
Это как бы простые стандартные схемы, но можно капельку сложней.
На схеме A, партиции "a","b","d" идут друг за другом без свободного места.
Но если подумать, можно сообразить что "b" Не что иное как swap и за счет него
можно расширить либо "a", либо "d".
Вернемся к вашему случаю:
#gpart show
=> 63 976562055 da0 MBR (466G)
63 312592707 1 freebsd [active] (149G)
312592770 663969348 - free - (317G)
=> 0 312592707 da0s1 BSD (149G)
0 2097152 1 freebsd-ufs (1.0G)
2097152 4105600 2 freebsd-swap (2.0G)
6202752 10440704 4 freebsd-ufs (5.0G)
16643456 2097152 5 freebsd-ufs (1.0G)
18740608 293841137 6 freebsd-ufs (140G)
312581745 10962 - free - (5.4M)
что мы видим:
da0s1b == "2097152 4105600 2 freebsd-swap (2.0G)"
И мы смело можем расширить за счет этого swap'а корень == da0s1a или
/usr == da0s1d (4 freebsd-ufs (5.0G))
Но, у нас slice 1 == da0s1 занимает НЕ ВЕСЬ диск, значит можно и сам слайс расширить
и у нас появится свободное место после da0s1f - которое можно просто отдать под
новый /usr - сделать новую партицию размером больше чем 5GB (расширить слайс на 10/20
и больше Gb) и тогда /usr будет /da0s1g (а на da0s1d - забить или монтировать как /tmp)
Есть другой вариант - создать новый слайс 2 и в нем da0s2d - нужного размера и монтировать
как /usr, а остальное место под другую FS.
Еще вариант: продумать будущую разметку, а слайс da0s2 использовать для бекапа
данных на da0s1, например:
da0s1:
"a" - 1GB
"b" - swap 2GB
"d" - /usr 5GB
"e" - ? 1GB
"f" - 140GB
далее свободное место на 317GB - его хватит чтобы полностью забекапить рабочую систему
и еще останется 317 - (1+2+5+1+140) ~= 167GB
схема
------------------
HDD
------------------
MBR
------------------
slice 1 ~ 150GB
------------------
free
------------------
end of HDD
------------------
хотим изменить slice da0s1 чтобы было:
"a" == 2Gb
"b" == 4GB
"d" == 30GB
"e" == 10GB
"f" == 140GB
------------
2+4+30+10+140 ~= 186 (в принципе еще нужно прибавить ~8% чтобы получить FS такого размера)
Делаем просто, вот такая схема new:
------------------
HDD
------------------
MBR
------------------
slice 1 ~ 150GB
------------------
free 40GB (150 + 40 = 190
------------------
slice 2 == da0s2
копия slice 1
--------
da0s2"a" - 1GB
da0s2"b" - swap 2GB
da0s2"d" - /usr 5GB
da0s2"e" - ? 1GB
da0s2"f" - 140GB
------------
free
------------------
end of HDD
------------------
далее newfs da0s2a/d/e/f - и делаем туда dump или pax или cpio - backup нашего
da0s1, если делать все в Single User, то можно не заморачиваясь
dd if=/dev/da0s1 of=/dev/da0s2 bs=1M
Вот и все, backup готов, далее увеличиваем da0s1 - создаем новые партиции нужного
размера (переразмечаем) и обратно restore/pax/cpio с нашего бекапа на da0s2
на FS нового размера.
Теперь у нас da0s1 стал больше, партиции на нем больше, а da0s2 можно заново
переделать под то что нам нужно.
Этот вариант проще, удобней и надежней, все равно не уйти от Single User - вопрос
только во времени, последний вариант займет больше времени.
Потренируйтесь на виртуалке или на десктопе со свободным диске и далее уже
приступайте к реорганизации реальной системы.
Ничего тут сложного и необычного, только аккуратность.
ps. Верхнее лишь наброски, не принимать как пошаговое howto, возможно очепятки
и ошибки.