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