Jump to content
Калькуляторы

Расширить раздел жесткого диска

Есть виртуалка-стенд, решил расширить один из разделов за счет добавления общего объема жесткого диска. Мануалов в сети хватает, но везде вновь образовавшееся пространство следует ЗА разделом (как правило, единственным в системе) после удаления свапа, размер которого требуется увеличить. В моем случаи разделы имеют следующую структуру и требуемый к увеличению раздел 5.

 

# gpart show da0
=>       40  209715120  da0  GPT  (100G)
         40       1024    1  freebsd-boot  (512K)
       1064    8388608    2  freebsd-swap  (4.0G)
    8389672    6291456    3  freebsd-ufs  (3.0G)
   14681128    2097152    4  freebsd-ufs  (1.0G)
   16778280   41943040    5  freebsd-ufs  (20G)
   58721320   20971520    6  freebsd-ufs  (10G)
   79692840   25164720    7  freebsd-ufs  (12G)
  104857560  104857600       - free -  (50G)

# df -h
Filesystem    Size    Used   Avail Capacity  Mounted on
/dev/da0p3    2.9G    244M    2.4G     9%    /
devfs         1.0K    1.0K      0B   100%    /dev
/dev/da0p4    992M    8.1M    904M     1%    /home
/dev/da0p5     19G     14G    3.8G    79%    /usr
/dev/da0p7     12G    465M     10G     4%    /usr2
/dev/da0p6    9.7G    735M    8.2G     8%    /var

 

gpart resize работает при наличии свободного места ПОСЛЕ целевой партиции, у меня же она в центре и за ней еще две, которые трогать не нужно.

А как делается MOVE-EXIST+FREE?

FreeBSD 13.1

Edited by mrrc

Share this post


Link to post
Share on other sites

С помощью стороннего ПО - загружаетесь с флешки или компакт диска и акронисом или чем-то подобным переделываете разделы и переносите.

Share this post


Link to post
Share on other sites

@Saab95 это ж на виртуалке, можно конечно присобачить образ загрузочный. Штатных средств ОС разве нет для решения стоящей задачи?

Share this post


Link to post
Share on other sites

создать второй диск, загрузиться в сингл мод и разметить второй как надо, разделы не изменяемого размера можно ДД, можно dump/restore, изменённые dump/restore  и поставить загрузчик.  выключиться, первый отцепить, включить и загрузиться.


 

NEWDISK=da1

# елси мы в single mod то
mount -o ro /usr
mount -o ro /home
mount -o ro /var
mount -o ro /usr2
#

gpart create -s gpt ${NEWDISK}
gpart add -a4k -s 512K -t freebsd-boot ${NEWDISK}  # 1
gpart add -a4k -s 4G   -t freebsd-swap ${NEWDISK}   # 2
gpart add -a4k -s 3G   -t freebsd-ufs ${NEWDISK}    # 3
gpart add -a4k -s 1G   -t freebsd-ufs ${NEWDISK}    # 4
gpart add -a4k -s 10G  -t freebsd-ufs ${NEWDISK}    # 5 (was 6)
gpart add -a4k -s 12G  -t freebsd-ufs ${NEWDISK}    # 6 (was 7)
gpart add -a4k         -t freebsd-ufs ${NEWDISK}    # 7 (was 5) # 100% FREE

newfs  -L root        /dev/${NEWDISK}p3
newfs  -L home -U -j  /dev/${NEWDISK}p4
newfs  -L usr2 -U -j  /dev/${NEWDISK}p5
newfs  -L var  -U -j  /dev/${NEWDISK}p6
newfs  -L usr  -U -J  /dev/${NEWDISK}p7

mount /dev/${NEWDISK}p3 /mnt
cd /mnt
dump 0 -f - / | restore -r -f -
mount /dev/${NEWDISK}p4 /mnt/home
mount /dev/${NEWDISK}p5 /mnt/usr2
mount /dev/${NEWDISK}p6 /mnt/var
mount /dev/${NEWDISK}p7 /mnt/usr
cd /mnt/home
dump 0 -f - /home | restore -r -f -
cd /mnt/usr2
dump 0 -f - /usr2 | restore -r -f -
cd /mnt/var
dump 0 -f - /var | restore -r -f -
cd /mnt/usr
dump 0 -f - /usr | restore -r -f -
sync
gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 ${NEWDISK}

vim /mnt/etc/fstab
# тут попарвить цифры на монтирование 7->6 6->5 5->7 или вообще указать лейблы


sync ; sync ; sync ; /bin/shutdown -p now

тут можно было бы указать старые номера конечно через -i в gpart add  но оно потом не шибко удобно, что пятый идёт после седьмого.... можно в будущей попутать чёнить....

 

на одном диска можно двигать штатными средствами, если свободно больше любого из двигаемых разделов, создаём раздел в конце, копируем туда, удаляем src, повторяем для второго с конца, расширяем нужный... но тут цифры в номерах партиций поедут...

Share this post


Link to post
Share on other sites

4 hours ago, st_re said:

тут можно было бы указать старые номера конечно через -i в gpart add  но оно потом не шибко удобно, что пятый идёт после седьмого.... можно в будущей попутать чёнить....

Писать в fstab всякие da0p1 - прошлый век, есть же давно GPT UUID, фишка которых в том, что они не меняются куда ты диск не вставляй.

Ещё label есть несколько разных на уровне фс и уровне геом, для тех кто любит ручками подписывать.

 

4 hours ago, st_re said:
gpart add -s4k -s 3G

У вас тут -s два раза, в первом случае должно быть -a.

 

 

15 hours ago, mrrc said:

Есть виртуалка-стенд, решил расширить один из разделов за счет добавления общего объема жесткого диска. Мануалов в сети хватает, но везде вновь образовавшееся пространство следует ЗА разделом (как правило, единственным в системе) после удаления свапа, размер которого требуется увеличить. В моем случаи разделы имеют следующую структуру и требуемый к увеличению раздел 5.

Если свободного места нет сразу за разделом и диск не оч большой то проще создать ещё один диск, подключить к виртуалке, разметить как надо и перетащить систему и данные туда.

Share this post


Link to post
Share on other sites

4 минуты назад, Ivan_83 сказал:

Писать в fstab всякие da0p1 - прошлый век, есть же давно GPT UUID, фишка которых в том, что они не меняются куда ты диск не вставляй.

Ещё label есть несколько разных на уровне фс и уровне геом, для тех кто любит ручками подписывать.

ну это само собой, просто когда номера разделов на диске не по порядку, потом снесешь чего не то... но в общем на работу не влияет..

 

5 минут назад, Ivan_83 сказал:

У вас тут -s два раза, в первом случае должно быть -a.

спасибо, список очепяток применил...

Share this post


Link to post
Share on other sites

18 часов назад, st_re сказал:
newfs /dev/da1p2 -L root
newfs /dev/da1p2p4 -L home -U -j
newfs /dev/da1p2p5 -L usr2 -U -j
newfs /dev/da1p6 -L var  -U -j
newfs /dev/da1p7 -L usr  -U -J

 

Пускаю построчно, скриптом слишком кошерно было бы, если сразу взлетело)

Спотыкается, начиная с создания fs на на созданных выше разделах.

Ошибка синтаксиса, судя по всему, самый вверх вывода в окне терминала hyper-v не вижу.

Edited by mrrc

Share this post


Link to post
Share on other sites

Верно, отработало

newfs -L root /dev/da1p2

Но этим мы создаем свап, судя по создаваемому размеру в 4096.0 MB, а далее вы на нем пытаетесь создать /home с /usr2, выходит..

 

newfs -L home -U -j /dev/da1p2p4
newfs -L usr2 -U -j /dev/da1p2p5

 

Нет в системе в /dev устройств таковых da1p2XX, собственно как с da1p3XX, видимо вначале еще и сам / создать надо.

 

Share this post


Link to post
Share on other sites

1 hour ago, mrrc said:

Но этим мы создаем свап

Это просто метки уровня ФС, я их вообще никогда не пишу.

 

1 hour ago, mrrc said:

Нет в системе в /dev устройств таковых da1p2XX

И не будет, и не создать их.

Share this post


Link to post
Share on other sites

12 часов назад, st_re сказал:

отработали ? должны были появиться разделы

ls /dev/da1p[1-7]

Конечно. Вы ранее про da1p2p4\da1p2p5 писали, их и не обнаруживалось.

 

root@vm:~ # ls -la /dev | grep da1
crw-r-----   1 root  operator  0x64 Jan 23 11:21 da1
crw-r-----   1 root  operator  0x6c Jan 23 11:21 da1p1
crw-r-----   1 root  operator  0x6d Jan 23 11:21 da1p2
crw-r-----   1 root  operator  0x6e Jan 23 11:21 da1p3
crw-r-----   1 root  operator  0x6f Jan 23 11:21 da1p4
crw-r-----   1 root  operator  0x70 Jan 23 11:21 da1p5
crw-r-----   1 root  operator  0x71 Jan 23 11:21 da1p6
crw-r-----   1 root  operator  0x72 Jan 23 11:21 da1p7
root@vm:~ #

root@vm:~ # gpart show da1
=>       40  209715120  da1  GPT  (100G)
         40       1024    1  freebsd-boot  (512K)
       1064    8388608    2  freebsd-swap  (4.0G)
    8389672    6291456    3  freebsd-ufs  (3.0G)
   14681128    2097152    4  freebsd-ufs  (1.0G)
   16778280   20971520    5  freebsd-ufs  (10G)
   37749800   25165824    6  freebsd-ufs  (12G)
   62915624  146799536    7  freebsd-ufs  (70G)

 

gpart add -a4k -s 4G   -t freebsd-swap ${NEWDISK}   # 2
newfs /dev/${NEWDISK}p2 -L root
mount /dev/${NEWDISK}p2 /mnt
cd /mnt
dump 0 -f - / | restore -r -f -

Мне кажется, проблема выше.
Мы создаем раздел 2 под свап, далее на нем файловую систему под /root, пытаемся задампить и развернуть туда существующий "/", нет?

Share this post


Link to post
Share on other sites

@st_re да, создание виртуального диска помогло, спасибо. А разве это не 2Gb&

/usr растянулся на нужный объем!

Интересная вещь получилась после откидывания src и загрузки с dst диска.

Продублировалось содержимое /var на /usr2, а с /usr2 на /var. При этом /usr2 получился копией /var, за исключением несколько папок из /var, которые отсутствуют на последнем.

 

Share this post


Link to post
Share on other sites

/etc/fstab поправили с в соответствии с новыми цифрами у разделов ? там у меня было 

vim /mnt/etc/fstab

 

/dev/da0p5 /usr2
/dev/da0p6 /var
/dev/da0p7 /usr

 

 

 

Share this post


Link to post
Share on other sites

Конечно, только 5 и 6 попутались, я прочел как: 7 на 6, 6 на 5, 5 на 7.

Еще ж получается, что и dump\restore мы развернули с src-диска из /var сразу на два раздела в dst, раз они зазеркалились?

 

В 20.01.2023 в 23:50, st_re сказал:
# тут попарвить цифры на монтирование 7->6 6->5 5->7

 

 

В общем для чистоты эксперимента я еще раз проделаю с ноля процедуру.

Share this post


Link to post
Share on other sites

развернули туда, куда смонтировали 

там сначала монтируется только корень в /mnt и делается дамп старого корня и рестор в текущую директорию

тут заодно создались точки монтирования под остальные разделы, они все скопом монтируются и дальше cd в соотв диру, и дамп - рестор. по крайней мере у меня я не вижу, где бы cd не соответствовал источнику дампа следом (тут dump читает текущий /etc/fstab)

Share this post


Link to post
Share on other sites

@st_re в общем попробовал воспроизвести процедуру по порядку еще раз на чистую с ноля, получил тот же самый эффект с миксом содержимого между /usr2 и /var, и вроде все прозрачно по порядку и внимательности, но где-то парадигма дает сбой)

Собственно это уже спортивный интерес был, т.к. все это тестовый стенд в первую очередь, и целевая задача с расширением /usr в любой случае решена и столь детальная практика по вопросу от вас принята, за что большая благодарность.

 

Не могу не задать такой вопрос - в свое время для резервирования дисков целиком под фрей (как правило от аппаратного выхода из строя, так и поломки логики фс) безотказно выручала простая портовая утилита sysutils/clonehdd на перле, использующая процедуры DUMP\RESTORE, с помощью которой было легко клонировались диски один в один. Но она очень давно перестала поддерживаться и на современных системах с GPT разметкой утратила работоспособность. Никаких ее аналогов на данный момент обнаружить не удалось и почему столь простое и эффективное решение никто не подхватил и не актуализировал - непонятно.

В ОС существует утилита recoverdisk, но она работает посекторно, соответственно процедура несравнимо долгая, чем при использовании DUMP\RESTORE, в особенности при наличии большого количества "пустоты" на диске.

Смогли бы посмотреть, насколько сложно было бы допилить данный инструмент (clonehdd) для унифицированного применения на современных Freebsd?

Edited by mrrc

Share this post


Link to post
Share on other sites

5 hours ago, mrrc said:

безотказно выручала простая портовая утилита sysutils/clonehdd на перле, использующая процедуры DUMP\RESTORE, с помощью которой было легко клонировались диски один в один.

Клонировать 1в1 - dd .... bs=4m status=progress

Клонировать руками - думаю те кто часто это делает просто написали себе скрипты.

Лично у меня это относительно редкая необходимость, этап с разметкой я заскриптовал, а дальше у меня rsync всё что нужно копирует.

Обновление системы (сборка, установка, очистка) у меня тоже заскриптовано, оно все доп порты пересобирает, которые с ядерными модулями и загрузчики обновляет.

Share this post


Link to post
Share on other sites

1 час назад, jffulcrum сказал:

Вроде у неё есть наследник: https://www.freshports.org/sysutils/clone

Посмотрел, не совсем очевидные примеры использования, как указать диск-источник и диск-назначение для получения точной копии?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.