Jump to content

Recommended Posts

Posted (edited)

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

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

Posted

создать второй диск, загрузиться в сингл мод и разметить второй как надо, разделы не изменяемого размера можно ДД, можно 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, повторяем для второго с конца, расширяем нужный... но тут цифры в номерах партиций поедут...

Posted
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.

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

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

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

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

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

 

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

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

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

Posted (edited)
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
Posted

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

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, видимо вначале еще и сам / создать надо.

 

Posted
1 hour ago, mrrc said:

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

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

 

1 hour ago, mrrc said:

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

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

Posted
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, пытаемся задампить и развернуть туда существующий "/", нет?

Posted

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

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

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

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

 

Posted

Конечно, только 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

 

 

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

Posted

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

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

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

Posted (edited)

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

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

 

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

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

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

Edited by mrrc
Posted
5 hours ago, mrrc said:

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

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

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

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

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

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.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.