Cài đặt OS trên Logical volume (II)

Tương tự bài trước, nhưng chúng ta chỉ dùng một đĩa trong cả quá trình dời rootfs sang logical volume. Thực hiện nhanh hơn và đơn giản hơn, tuy làm thủ công nhưng không mất quá 5 phút.

Không mở rộng đĩa khi khởi động lần đầu

Sau khi ghi file ảnh vào đĩa, chúng ta ngăn PiOS tự động nới rộng partition rootfs đến hết dung lượng đĩa bằng cách xóa dòng sau trong cmdline.txt

Sau đó dùng đĩa này khởi động như bình thường. Tên đĩa có thể là mmcblk0 hoặc sda … tùy khởi động ở vị trí USB nào.

# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
mmcblk0     179:0    0 29.8G  0 disk
├─mmcblk0p1 179:1    0  256M  0 part /boot
└─mmcblk0p2 179:2    0  1.6G  0 part /

rootfs chỉ chiếm 1.6G (PiOS Bullseye bản lite 64bit), nhưng còn trống 200M đủ để update và cài thêm lvm2.

# df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       1.6G  1.3G  195M  87% /

Cài đặt phần mềm

sudo -Es
apt update && apt full-upgrade -y
apt install lvm2 -y

Tạo initrd.img

Xem các driver đi kèm OS:

ls /lib/modules/

Giả sử drivers có version mới nhất là 5.15.32-v8+

Tạo file initrd.img ở boot. Tên file có version để sau này dễ update.

sed -i 's/^MODULES=most/MODULES=list/' /etc/initramfs-tools/initramfs.conf
mkinitramfs -o /boot/initrd.img-5.15.32-v8+ 5.15.32-v8+
apt clean

Có thể có vài thông báo lỗi do hệ thống fat trên partition boot không hỗ trợ, bỏ qua.

Sửa file /boot/config.txt, ghi ở đầu file để yêu cầu nạp initramfs khi khởi động:

[pi4]
initramfs initrd.img-5.15.32-v8+ followkernel

Tạo partition cho phần đĩa trống

Chúng ta giữ nguyên 2 partition đã có khi tạo đĩa, tạo thêm partition kiểu lvm lấy hết dung lượng trống còn lại.

# fdisk /dev/mmcblk0
...
Device         Boot  Start     End Sectors  Size Id Type
/dev/mmcblk0p1        8192  532479  524288  256M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      532480 3907583 3375104  1.6G 83 Linux

Command (m for help): n
Partition type
   p   primary (2 primary, 0 extended, 2 free)
   e   extended (container for logical partitions)
Select (default p):

Using default response p.
Partition number (3,4, default 3):
First sector (2048-62521343, default 2048): 3907584
Last sector, +/-sectors or +/-size{K,M,G,T,P} (3907584-62521343, default 62521343):

Created a new partition 3 of type 'Linux' and of size 27.9 GiB.

Command (m for help): t
Partition number (1-3, default 3):
Hex code or alias (type L to list all): lvm

Changed type of partition 'Linux' to 'Linux LVM'.

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

Tạo logical volume root.lv

Trên partition mới tạo, chúng ta tạo volume group và dành một ít cho logical volume chứa rootfs.

# Tạo physical volume trước
pvcreate /dev/mmcblk0p3

# Tạo volume group trên physical volume
vgcreate rpi.vg /dev/mmcblk0p3

# Tạo logical volume dành cho rootfs
lvcreate -n root.lv -L 6G rpi.vg

Format và mount root.lv

mkfs.ext4 -L rootfs /dev/mapper/rpi.vg-root.lv
mkdir /mnt/rootfs
mount /dev/mapper/rpi.vg-root.lv /mnt/rootfs

Chuyển Raspian sang root.lv

Sao chép tất cả file của rootfs sang logical volume.

rsync -avx / /mnt/rootfs

Chỉnh sửa /boot/cmdline.txt và /mnt/rootfs/etc/fstab

Thay đổi điểm khởi động vào logical volume.

PARTUUID=xxxxxxxx.02 => /dev/mapper/rpi.vg-root.lv

Khởi động lại

Bây giờ rootfs đã là logical volume.

Cấu trúc đĩa hiện tại như sau:

# lsblk
NAME               MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
mmcblk0            179:0    0 29.8G  0 disk
├─mmcblk0p1        179:1    0  256M  0 part /boot
├─mmcblk0p2        179:2    0  1.6G  0 part
└─mmcblk0p3        179:3    0 27.9G  0 part
  └─rpi.vg-root.lv 254:0    0    6G  0 lvm  /

Chúng ta có partition mmcblk0p2 xem như backup OS khi hoàn tất cài đặt ban đầu, không chiếm nhiều dung lượng. Phần volume group còn trống có thể dành tạo thêm nhiều logical volume khác.

## script backup.os
## backup rootfs to /dev/mmcblk0p2

DEV=/dev/mmcblk0p2
f=$(mktemp)
F=$(mktemp -d)
if mount $DEV $F; then
  cat <<EOF > $f
/var/log
/var/tmp
/tmp
/var/swap
EOF
  rsync -avx --delete --exclude-from=$f / $F
  umount $F
fi
rm -rf $F
rm $f

Hoặc mở rộng volume group rpi.vg sang mmcblk0p2

Trước tiên phải đổi mmcblk0p2 thành physical volume rồi mới ghép vào rpi.vg

fdisk /dev/mmcblk0
...
Device         Boot   Start      End  Sectors  Size Id Type
/dev/mmcblk0p1         8192   532479   524288  256M  c W95 FAT32 (LBA)
/dev/mmcblk0p2       532480  3907583  3375104  1.6G 83 Linux
/dev/mmcblk0p3      3907584 62521343 58613760 27.9G 8e Linux LVM

Command (m for help): t
Partition number (1-3, default 3): 2
Hex code or alias (type L to list all): lvm

Changed type of partition 'Linux' to 'Linux LVM'.
...

pvcreate /dev/mmcblk0p2
...

vgextend /dev/rpi.vg /dev/mmcblk0p2
...

Comments Off on Cài đặt OS trên Logical volume (II)

Filed under Software

Comments are closed.