10 сентября 2021

Перенос системы на LVM с HDD на SSD с расширением разделов

По воле случая, заапгрейдили мне рабочий комп, докупив ему оперативной памяти и SSD диск. Если с оперативой как обычно никогда не возникает проблем - вставил и заработало, то вот с SSD сразу же возник вопрос: что с ним делать? Первое что приходит в голову - установить новую систему. Однако если устанавливать систему заново, потом устанавливать кучу программ, всякие VPN-ы, сертификаты и прочую дребедень, которая повседневно используется... И главное не забыть какой нить файлик, который как всегда понадобится именно тогда, когда его удаляешь. Для этого всего безобразия я слишком ленив. Да и тратить столько времени мне просто жалко. Поэтому второй вариант, который более правильный - разделение и перенос системы.


На моём компе стоит терабайтный HDD с установленной Linux Mint под управлением LVM. При этом, выделен только 1 раздел, куда установлена система. Мне нужно было перенести систему на SSD без "хомяка" и прочих не столь важных для ее работы разделов, чтобы она шустрее работала и сделать загрузку через UEFI, так как текущая система загружалась через BIOS загрузчик. Другими словами, мне нужно было как минимум разбить один большой раздел на несколько, ядро системы и загрузчик перенести на SSD, остальное оставить на HDD.

Понимая, что задачка не такая уж и тривиальная, как может показаться на первый взгляд, я обратился к всемирному разуму, дабы поинтересоваться, как с подобными задачами другой честной народ справляется. Учитывая, что я с LVM не работал вообще в принципе (поставил и забыл), я надеялся увидеть примерно приблизительно развернутые ответы, что и как делать. Но увы и ах. Всемирный разум говорил, что всё "легко и просто" без каких либо подробностей. На практике же всё оказалось совсем не так уж "легко и просто", а порой даже не совсем очевидно, что нужно именно делать именно так, а не иначе.

Собрав небольшую горсть информации и прежде чем с ножом кидаться на рабочую систему, я решил провести ряд экспериментов на VirtualBox, чтобы удостовериться в правильности своих действий. И уж только после успешно проведенной работы производить эти же действия на рабочей системе. В любом случае, если кто решится делать подобные изменения на своей системе, настоятельно рекомендую найти любой способ сделать backup, так как некоторые операции, которые вы будете производить будут необратимыми и вы уже не сможете восстановить систему путём "отката".

Итак, поехали. Грузимся с загрузочного Mint (flash-drive) и переходим на root-а. Лучше сразу загрузиться через UEFI, дабы в дальнейшем не пришлось перегружаться. В чем разница и для чего это требуется, я расскажу позже.

mint@mint:~$ sudo su -

Для начала разберемся с HDD и произведем все нужные разметки

Создаём разделы для монтирования

root@mint:~# cd /mnt
root@mint:/mnt# mkdir root core opt srv tmp timeshift home

Смотрим какие есть разделы на физических разделах и LVM

root@mint:/mnt# lsblk
NAME              MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0               7:0    0   1.9G  1 loop /rofs
sda                 8:0    0 931.5G  0 disk 
└─sda1              8:1    0 931.5G  0 part 
  ├─vgmint-root   253:0    0 915.7G  0 lvm  
  └─vgmint-swap_1 253:1    0  15.7G  0 lvm  
sdb                 8:16   0 232.9G  0 disk 
sdc                 8:32   1  59.8G  0 disk 
├─sdc1              8:33   1     2G  0 part /cdrom
├─sdc2              8:34   1   3.9M  0 part 
└─sdc3              8:35   1  57.8G  0 part /var/log
root@mint:/mnt# lvdisplay
  --- Logical volume ---
  LV Path                /dev/vgmint/root
  LV Name                root
  VG Name                vgmint
  LV UUID                gNba7J-a7jh-2g0x-cYwB-c43Q-dbqt-f4I71V
  LV Write Access        read/write
  LV Creation host, time mint, 2019-01-17 07:41:57 +0000
  LV Status              available
  # open                 0
  LV Size                915.64 GiB
  Current LE             234404
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0
   
  --- Logical volume ---
  LV Path                /dev/vgmint/swap_1
  LV Name                swap_1
  VG Name                vgmint
  LV UUID                fz1oMO-8y04-OglL-R6qA-x5jd-XvIm-jJtiyy
  LV Write Access        read/write
  LV Creation host, time mint, 2019-01-17 07:41:57 +0000
  LV Status              available
  # open                 0
  LV Size                <15.68 GiB
  Current LE             4014
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

Подключаем корневой раздел

root@mint:/mnt# mount /dev/vgmint/root /mnt/root

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

root@mint:/mnt# cd /mnt/root/
root@mint:/mnt/root# du -d 1 -h .
4.0K	./proc
16K     ./lost+found
1.6G	./lib
12K     ./dev
12G     ./var
815M	./opt
44G     ./timeshift
124K	./run
88K     ./lib32
4.0K	./lib64
8.0K	./mnt
276G	./home
152M	./root
16K     ./media
19M     ./etc
4.0K	./srv
9.8G	./usr
4.0K	./cdrom
21M	./sbin
18M	./bin
4.0K	./sys
140K	./tmp
318M	./boot
344G	.

Пока данная операция занимается подсчетами, открываем еще одну вкладку (или консоль) и проверяем достаточно ли места для дальнейших операций

mint@mint:~$ df -h
Filesystem                   Size  Used Avail Use% Mounted on
udev                          16G     0   16G   0% /dev
tmpfs                        3.2G  9.4M  3.1G   1% /run
/dev/sdc1                    2.1G  2.1G     0 100% /cdrom
/dev/loop0                   1.9G  1.9G     0 100% /rofs
/cow                          16G  132M   16G   1% /
/dev/disk/by-label/writable   57G   55M   54G   1% /var/log
tmpfs                         16G     0   16G   0% /dev/shm
tmpfs                        5.0M  4.0K  5.0M   1% /run/lock
tmpfs                         16G     0   16G   0% /sys/fs/cgroup
tmpfs                         16G  504K   16G   1% /tmp
tmpfs                        3.2G   36K  3.2G   1% /run/user/999
/dev/mapper/vgmint-root      901G  344G  512G  41% /mnt/root

Мне требуется для разделов opt, srv, tmp, timeshift и home выделить отдельные разделы (для каждого свой). По моим подсчетам, первым трём я решил отдать по 10GB, timeshift - 100GB, для "хомяка" - всё оставшееся свободное пространство, которое останется после всех операций. В итоге, после получения всей статистики по дискам у меня получилось 10+10+10+100+276 = 406GB - это минимальный размер, который мне требуется. Учитывая, что на HDD осталось 512G свободного пространства, я могу спокойно продолжать перенос безо всяких дополнительных операций. Если же получится так, что у вас недостаточно места для этого, придётся делать перенос в несколько этапов. Например, сначала перенести home директорию, далее ее удалить, после выделить место под другой раздел или разделы, зачистить и так далее. В моём случае, для системы будет достаточно комфортно, если я раздел /dev/vgmint/root уменьшу до 400GB

Отключаем раздел

root@mint:/mnt/root# cd /
root@mint:/# umount /dev/vgmint/root

Выполняем проверку диска

root@mint:/mnt# e2fsck -fy /dev/vgmint/root
e2fsck 1.45.5 (07-Jan-2020)
Pass 1: Checking inodes, blocks, and sizes
Inode 37752975 extent tree (at level 2) could be narrower.  Optimize? yes

Inode 37752989 extent tree (at level 2) could be narrower.  Optimize? yes

Inode 38409143 extent tree (at level 1) could be narrower.  Optimize? yes

Pass 1E: Optimizing extent trees
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information

/dev/vgmint/root: ***** FILE SYSTEM WAS MODIFIED *****
/dev/vgmint/root: 2574010/60014592 files (1.2% non-contiguous), 94050912/240029696 blocks

Уменьшаем размер файловой системы. Указываем, что новый размер будет равен 400GB. Данная операция достаточно трудоемкая и занимает значительное время. Поэтому наберитесь терпения (чаем и печеньками). В моем случае, она заняла порядка 5 часов, возможно и больше, так как точное время не замерял.

root@mint:/# resize2fs -p /dev/vgmint/root 400G
resize2fs 1.45.5 (07-Jan-2020)
Resizing the filesystem on /dev/vgmint/root to 104857600 (4k) blocks.
Begin pass 2 (max = 64711530)
Relocating blocks             XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Begin pass 3 (max = 7326)
Scanning inode table          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Begin pass 4 (max = 569186)
Updating inode references     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/vgmint/root is now 104857600 (4k) blocks long.

После этого, уменьшаем размер LVM раздела. Также указываем, что новый размер будет равен 400GB

root@mint:/# lvreduce -L 400G /dev/vgmint/root
  WARNING: Reducing active logical volume to 400.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vgmint/root? [y/n]: y
  Size of logical volume vgmint/root changed from 915.64 GiB (234404 extents) to 400.00 GiB (102400 extents).
  Logical volume vgmint/root successfully resized.

Смотрим появление свободного места в группе

root@mint:/# vgdisplay
  --- Volume group ---
  VG Name               vgmint
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  7
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <931.51 GiB
  PE Size               4.00 MiB
  Total PE              238466
  Alloc PE / Size       106414 / <415.68 GiB
  Free  PE / Size       132052 / <515.83 GiB
  VG UUID               Z9baPy-yfw9-e0Jn-VC47-rarS-3ImB-8hqV0C

Проверяем, что диск как и прежде подключается, а значит при уменьшении не попортилась файловая система. Не знаю почему, что и как я сделал не так, но когда я в первый раз производил эту операцию на VirtualBox, я каким то образом порушил файловую систему. Думаю, скорее всего сделал неправильные подсчеты. В любом случае, если диск не монтируется и/или не читается, то "это фиаско, братан". Именно поэтому я изначально рекомендовал найти любой способ создания backup-а текущих данных, дабы при подобной ситуации можно было привести убитую систему в рабочее состояние.

root@mint:/# mount /dev/vgmint/root /mnt/root

Можно попытаться зайти в любой раздел диска и отредактировать любой файл, после откатить изменения. Если изменения сохраняются, значит всё в порядке. После проверки отключаем раздел.

root@mint:/# cd /
root@mint:/# umount /dev/vgmint/root

Создаём логические разделы на свободном пространстве

root@mint:/# lvcreate -L 10G -n opt vgmint
  Logical volume "opt" created.
root@mint:/# lvcreate -L 10G -n srv vgmint
  Logical volume "srv" created.
root@mint:/# lvcreate -L 100G -n timeshift vgmint
  Logical volume "timeshift" created.
root@mint:/# lvcreate -L 10G -n tmp vgmint
  Logical volume "tmp" created.
root@mint:/# lvcreate -l 100%FREE -n home vgmint
  Logical volume "home" created.

Смотрим что использовано всё пространство

root@mint:/# vgdisplay
  --- Volume group ---
  VG Name               vgmint
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  12
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                7
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <931.51 GiB
  PE Size               4.00 MiB
  Total PE              238466
  Alloc PE / Size       238466 / <931.51 GiB
  Free  PE / Size       0 / 0   
  VG UUID               Z9baPy-yfw9-e0Jn-VC47-rarS-3ImB-8hqV0C

и что созданы дополнительные разделы нужного размера

root@mint:/# lvdisplay
  --- Logical volume ---
  LV Path                /dev/vgmint/root
  LV Name                root
  VG Name                vgmint
[...skipped...]
  LV Size                400.00 GiB
[...skipped...]

  --- Logical volume ---
  LV Path                /dev/vgmint/swap_1
  LV Name                swap_1
  VG Name                vgmint
[...skipped...]
  LV Size                <15.68 GiB
[...skipped...]

  --- Logical volume ---
  LV Path                /dev/vgmint/opt
  LV Name                opt
  VG Name                vgmint
[...skipped...]
  LV Size                10.00 GiB
[...skipped...]

  --- Logical volume ---
  LV Path                /dev/vgmint/srv
  LV Name                srv
  VG Name                vgmint
[...skipped...]
  LV Size                10.00 GiB
[...skipped...]

  --- Logical volume ---
  LV Path                /dev/vgmint/timeshift
  LV Name                timeshift
  VG Name                vgmint
[...skipped...]
  LV Size                100.00 GiB
[...skipped...]

  --- Logical volume ---
  LV Path                /dev/vgmint/tmp
  LV Name                tmp
  VG Name                vgmint
[...skipped...]
  LV Size                10.00 GiB
[...skipped...]

  --- Logical volume ---
  LV Path                /dev/vgmint/home
  LV Name                home
  VG Name                vgmint
[...skipped...]
  LV Size                <385.83 GiB
[...skipped...]

Создаём файловые системы на созданных разделах. /tmp я форматирую под ext2 (сила привычки). Однако, вы можете этот раздел также отформатировать под ext4

root@mint:/# mkfs.ext4 /dev/vgmint/opt
mke2fs 1.45.5 (07-Jan-2020)
[...skipped...]
Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done 

root@mint:/# mkfs.ext4 /dev/vgmint/srv
mke2fs 1.45.5 (07-Jan-2020)
[...skipped...]
Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done 

root@mint:/# mkfs.ext4 /dev/vgmint/timeshift
mke2fs 1.45.5 (07-Jan-2020)
[...skipped...]
Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (131072 blocks): done
Writing superblocks and filesystem accounting information: done   

root@mint:/# mkfs.ext2 /dev/vgmint/tmp
mke2fs 1.45.5 (07-Jan-2020)
[...skipped...]
Allocating group tables: done                            
Writing inode tables: done                            
Writing superblocks and filesystem accounting information: done 

root@mint:/# mkfs.ext4 /dev/vgmint/home
mke2fs 1.45.5 (07-Jan-2020)
[...skipped...]
Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done

Монтируем разделы

root@mint:/# mount /dev/vgmint/root /mnt/root
root@mint:/# mount /dev/vgmint/opt /mnt/opt
root@mint:/# mount /dev/vgmint/srv /mnt/srv
root@mint:/# mount /dev/vgmint/tmp /mnt/tmp
root@mint:/# mount /dev/vgmint/timeshift /mnt/timeshift
root@mint:/# mount /dev/vgmint/home /mnt/home

и переносим их из root-раздела

root@mint:/# rsync -aAXv /mnt/root/opt /mnt
[...skipped...]
root@mint:/# rsync -aAXv /mnt/root/srv /mnt
[...skipped...]
root@mint:/# rsync -aAXv /mnt/root/tmp /mnt
[...skipped...]
root@mint:/# rsync -aAXv /mnt/root/timeshift /mnt
[...skipped...]
root@mint:/# rsync -aAXv /mnt/root/home /mnt

rsync работает достаточно шустро. Однако, в зависимости от объёма переносимых данных, эти операции также могут отнять значительное время. Поэтому, чтобы понимать, что происходит в данный момент, стоит опция -v (verbose). По окончании переноса, правим fstab в root-разделе

root@mint:/# nano /mnt/root/etc/fstab

По умолчанию, там будет находиться запись только для /dev/mapper/vgmint-root. Нужно добавить остальные разделы по подобию этой записи.

# <file system>               <mount point>   <type>  <options>          <dump>  <pass>
/dev/mapper/vgmint-root       /               ext4    errors=remount-ro  0       1
/dev/mapper/vgmint-opt        /opt            ext4    errors=remount-ro  0       1
/dev/mapper/vgmint-srv        /srv            ext4    errors=remount-ro  0       1
/dev/mapper/vgmint-timeshift  /timeshift      ext4    errors=remount-ro  0       1
/dev/mapper/vgmint-tmp        /tmp            ext2    errors=remount-ro  0       1
/dev/mapper/vgmint-home       /home           ext4    errors=remount-ro  0       1
/dev/mapper/vgmint-swap_1     none            swap    sw                 0       0

Выходим с сохранением. Удаляем из уже перенесенных разделов всю информацию.

root@mint:/# cd /mnt/root/opt && rm -rf *
root@mint:/mnt/root/opt# cd /mnt/root/srv && rm -rf *
root@mint:/mnt/root/srv# cd /mnt/root/tmp && rm -rf *
root@mint:/mnt/root/tmp# cd /mnt/root/timeshift && rm -rf *
root@mint:/mnt/root/timeshift# cd /mnt/root/home && rm -rf *

Отключаем и делаем проверку всех разделов

root@mint:/mnt/root/home# cd /
root@mint:/# umount /dev/vgmint/root
root@mint:/# umount /dev/vgmint/opt
root@mint:/# umount /dev/vgmint/srv
root@mint:/# umount /dev/vgmint/tmp
root@mint:/# umount /dev/vgmint/timeshift
root@mint:/# umount /dev/vgmint/home
root@mint:/# e2fsck -fy /dev/vgmint/opt
e2fsck 1.45.5 (07-Jan-2020)
[...skipped...]
root@mint:/# e2fsck -fy /dev/vgmint/srv
e2fsck 1.45.5 (07-Jan-2020)
[...skipped...]
root@mint:/# e2fsck -fy /dev/vgmint/tmp
e2fsck 1.45.5 (07-Jan-2020)
[...skipped...]
root@mint:/# e2fsck -fy /dev/vgmint/timeshift
e2fsck 1.45.5 (07-Jan-2020)
[...skipped...]
root@mint:/# e2fsck -fy /dev/vgmint/home
e2fsck 1.45.5 (07-Jan-2020)
[...skipped...]
root@mint:/# e2fsck -fy /dev/vgmint/root
e2fsck 1.45.5 (07-Jan-2020)
[...skipped...]

С HDD теперь у нас всё в порядке. Теперь настало время разобраться с SSD.

Проверяем, какое текущее состояние диска.

root@mint:/# fdisk -l /dev/sdb
Disk /dev/sdb: 232.91 GiB, 250059350016 bytes, 488397168 sectors
Disk model: WDC  WDS250G2B0A
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Так как диск новый, никаких разделов у него указано не будет. Мне требуется добавить разделы:

  • загрузочный (/dev/sdb1, 512M)
  • extended (/dev/sdb2, 100%FREE)
  • рабочий для LVM (/dev/sdb5, 100%FREE)

Что собственно и делаем через старую добрую утилиту fdisk.

root@mint:/# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.34).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xaa3f80ad.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-488397167, default 2048): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-488397167, default 488397167): +512M

Created a new partition 1 of type 'Linux' and of size 512 MiB.

Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): e
Partition number (2-4, default 2): 
First sector (1050624-488397167, default 1050624): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (1050624-488397167, default 488397167): 

Created a new partition 2 of type 'Extended' and of size 232.4 GiB.

Command (m for help): n
All space for primary partitions is in use.
Adding logical partition 5
First sector (1052672-488397167, default 1052672): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (1052672-488397167, default 488397167): 

Created a new partition 5 of type 'Linux' and of size 232.4 GiB.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Указываем, что диск будет загрузочным. Многие это делают за один такт, то есть в предыдущей команде перед записью, выполняют операцию установки флага. Я же привык это делать в 2 этапа: сначала создаю разделы, потом произвожу с ними нужные операции. Оба варианта являются правильным, выбор устаётся за вами.

root@mint:/# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.34).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): a
Partition number (1,2,5, default 5): 1

The bootable flag on partition 1 is enabled now.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Форматируем загрузочный раздел в Fat32

root@mint:/# mkfs.vfat /dev/sdb1
mkfs.fat 4.1 (2017-01-24)

Переходим к форматированию LVM. Помечаем, что LMV будет использоваться на /dev/sdb5 разделе.

root@mint:/# pvcreate /dev/sdb5
  Physical volume "/dev/sdb5" successfully created.

Проверяем, что диск добавился в LVM

root@mint:/# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda1
  VG Name               vgmint
  PV Size               931.51 GiB / not usable 4.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              238466
  Free PE               0
  Allocated PE          238466
  PV UUID               zYdZLH-gsuz-bQG3-aC8i-Bfwc-Tdjs-GuCNfP
   
  "/dev/sdb5" is a new physical volume of "232.38 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb5
  VG Name               
  PV Size               232.38 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               nEnvcF-ZoP1-g5ZM-phev-khpe-EZ5f-rpPaTc

Добавляем его в общую группу (vgmint)

root@mint:/# vgextend vgmint /dev/sdb5
  Volume group "vgmint" successfully extended

Проверяем, что в группе появилось свободное место

root@mint:/# vgdisplay
  --- Volume group ---
  VG Name               vgmint
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  13
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                7
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               <1.14 TiB
  PE Size               4.00 MiB
  Total PE              297956
  Alloc PE / Size       238466 / <931.51 GiB
  Free  PE / Size       59490 / 232.38 GiB
  VG UUID               Z9baPy-yfw9-e0Jn-VC47-rarS-3ImB-8hqV0C

Cоздаём на нём логический раздел на всё свободное пространство

root@mint:/# lvcreate -l 100%FREE -n core vgmint
  Logical volume "core" created.

Проверяем

root@mint:/# lvdisplay
[...skipped...]
  --- Logical volume ---
  LV Path                /dev/vgmint/core
  LV Name                core
  VG Name                vgmint
[...skipped...]
  LV Size                232.38 GiB
[...skipped...]

Создаём файловую систему

root@mint:/# mkfs.ext4 /dev/vgmint/core
mke2fs 1.45.5 (07-Jan-2020)
Discarding device blocks: done                            
Creating filesystem with 60917760 4k blocks and 15237120 inodes
Filesystem UUID: e5d191e3-b5b1-47b7-a32d-f1ca9743140a
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done

Подключаем корневые разделы

root@mint:/# mount /dev/vgmint/root /mnt/root
root@mint:/# mount /dev/vgmint/core /mnt/core

Переносим корневой раздел с HDD на SSD

root@mint:/# rsync -aAXv /mnt/root/* /mnt/core
[...skipped...]

Правим fstab на SSD диске

root@mint:/# nano /mnt/core/etc/fstab

Так как этот файл был перенесен из root-раздела, запись корневого раздела будет ссылаться на него. Требуется поменять его на новый раздел core.

# <file system>               <mount point>   <type>  <options>          <dump>  <pass>
/dev/mapper/vgmint-core       /               ext4    errors=remount-ro  0       1
/dev/mapper/vgmint-opt        /opt            ext4    errors=remount-ro  0       1
/dev/mapper/vgmint-srv        /srv            ext4    errors=remount-ro  0       1
/dev/mapper/vgmint-timeshift  /timeshift      ext4    errors=remount-ro  0       1
/dev/mapper/vgmint-tmp        /tmp            ext2    errors=remount-ro  0       1
/dev/mapper/vgmint-home       /home           ext4    errors=remount-ro  0       1
/dev/mapper/vgmint-swap_1     none            swap    sw                 0       0

Выходим с сохранением и отключаем диски

root@mint:/# umount /dev/vgmint/root
root@mint:/# umount /dev/vgmint/core

На этом все изменения с дисками и его разделами выполнены. Однако, если перезагрузиться, по умолчанию система загрузится с HDD, однако новые только что созданные разделы будут примонтированы и будут работать как и прежде (за исключением core конечно же). Но нам требуется чтобы грузилось с SSD. Поэтому исправляем эту проблему, а именно чиним загрузчик. Запускаем утилиту boot-repair от обычного пользователя, под root-ом у меня этот финт ушами почему то не получился. Важный момент, загрузка с флэшки должна быть произведена через UEFI (то о чем я говорил в самом начале). Если загрузка была через BIOS, установить EFI утилита не сможет, указав соответствующее предупреждающее сообщение.

mint@mint:~$ boot-repair

Программа достаточно интуитивно понятная, чтобы ее тут описывать. Я использую расширенные настройки, дабы точно указать программе, какие операции ей требуется выполнить. Что требуется сделать:

  • установить EFI загрузчик (/boot/efi, sdb1)
  • производить загрузку с диска /dev/mapper/vgmint-core
  • остальные настройки по вкусу и цвету. Я лично только отключил вывод загрузочного меню.

После того, как все операции будут выполнены, перегружаемся и проверяем что система теперь грузится с SSD и что всё работает исправно. Практически все работы уже выполнены. Осталось удалить оставшуюся информацию на root разделе и отдать свободное пространство home-разделу.

Перегружаемся снова с загрузочной flash-ки и переходим на root-а

mint@mint:~$ sudo su -

Удаляем логический раздел

root@mint:~# lvremove /dev/vgmint/root
Do you really want to remove and DISCARD active logical volume vgmint/root? [y/n]: y
  Logical volume "root" successfully removed

Отдаём всё свободное место home-разделу

root@mint:~# lvextend -l +100%FREE /dev/vgmint/home
  Size of logical volume vgmint/home changed from <385.83 GiB (98772 extents) to <685.83 GiB (175572 extents).
  Logical volume vgmint/home successfully resized.

Выполняем проверку диска

root@mint:~# e2fsck -fy /dev/vgmint/home
e2fsck 1.45.5 (07-Jan-2020)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vgmint/home: 464701/25288704 files (0.8% non-contiguous), 74162661/101142528 blocks

Увеличиваем размер файловой системы

root@mint:~# resize2fs -p /dev/vgmint/home
resize2fs 1.45.5 (07-Jan-2020)
Resizing the filesystem on /dev/vgmint/home to 179785728 (4k) blocks.
The filesystem on /dev/vgmint/home is now 179785728 (4k) blocks long.

С диска /dev/sda убираем флаг загрузочного

root@mint:~# fdisk /dev/sda

Welcome to fdisk (util-linux 2.34).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): a
Selected partition 1
The bootable flag on partition 1 is disabled now.

Command (m for help): w
The partition table has been altered.
Syncing disks.

После этого перегружаемся и наслаждаемся полученным результатом.

На этом все. Если заметили недочеты по статье, пишите в комментариях.

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

Источники:
https://www.dmosk.ru/instruktions.php?object=lvm
https://codeby.net/threads/kak-dobavit-dopolnitelnyj-vtoroj-zhestkij-disk-v-linux-lvm-i-uvelichit-razmer-xranilischa.67786/
https://dsavenko.me/migrating-centos-system-from-hdd-to-smaller-ssd-on-xfs-filesystem/

1 комментарий :

  1. Анонимный25 апреля, 2023 01:11

    Спасибо, ничего не понятно.
    Вот прямо с первых строчек.

    <>

    Вы где создаёте эти разделы? На старом HDD? На новом SSD? На флешке, с которой Вы загрузились?

    ОтветитьУдалить