Trong PiOS, ở lần khởi động đầu tiên partition OS thường được mở rộng đến hết dung lượng đĩa, chúng ta phải phân vùng lại theo nhu cầu. Trong Ubuntu phần đĩa trống được giữ nguyên, nhưng chúng ta vẫn phải nới rộng kích thước partition OS dành chổ cho việc cài thêm phần mềm sau này.
:~# lsblk
sda 8:0 0 232.9G 0 disk
├─sda1 8:1 0 363M 0 part /boot/firmware
├─sda2 8:2 0 29.9G 0 part /
└─sda3 8:3 0 202.7G 0 part /mnt
mmcblk0 179:0 0 29.8G 0 disk
├─mmcblk0p1 179:1 0 256M 0 part
└─mmcblk0p2 179:2 0 2.9G 0 part
## mmcblk0 dung lượng 29.8G, flash OS xong có 2 partition tổng 3G
Trong giao diện dòng lệnh Linux, thay đổi kích thước partition có thể dùng lệnh fdisk. Nếu trước hay sau partition X có vùng đĩa trống (chưa phân vùng) thì có thể mở rộng partition X bằng cách xóa X đi và tạo lại với kích thước lớn hơn, còn nếu thu nhỏ thì càng đơn giản. Tuy nhiên vấn đề là dữ liệu đang có trên partition X có toàn vẹn hay không sau thao tác thay đổi kích thước phân vùng?
:~# fdisk /dev/mmcblk0
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): p
Disk /dev/mmcblk0: 29.83 GiB, 32010928128 bytes, 62521344 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xf66f0719
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 * 2048 526335 524288 256M c W95 FAT32 (LBA)
/dev/mmcblk0p2 526336 6578683 6052348 2.9G 83 Linux
Command (m for help): d # Xóa partition
Partition number (1,2, default 2):
Partition 2 has been deleted.
Command (m for help): n # Tạo lại với dung lượng mới
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (2-4, default 2):
First sector (526336-62521343, default 526336):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (526336-62521343, default 62521343): +10G
Created a new partition 2 of type 'Linux' and of size 10 GiB.
Partition #2 contains a ext4 signature.
Do you want to remove the signature? [Y]es/[N]o: n
Command (m for help): n # Tạo partition cho phần đĩa trống
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 (21497856-62521343, default 21497856):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (21497856-62521343, default 62521343):
Created a new partition 3 of type 'Linux' and of size 19.6 GiB.
Partition #3 contains a ext4 signature.
Do you want to remove the signature? [Y]es/[N]o: n
Command (m for help): w # Ghi các thay đổi lên đĩa
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
Chúng ta phải chạy 2 lệnh e2fsck để kiểm tra lỗi đĩa và resize2fs để cập nhật cấu trúc đĩa sau khi thay đổi kích thước partition. Nên thay đổi kích thước partition ngay sau khi flash OS. Nếu thay đổi kích thước partition của đĩa đang chạy OS thì đa phần là bị lỗi, không chạy được các lệnh trên do các partition không thể umount.
:~# e2fsck -pf /dev/mmcblk0p2
writable: 75247/189312 files (0.3% non-contiguous), 506195/756543 blocks
:~# resize2fs /dev/mmcblk0p2
resize2fs 1.45.5 (07-Jan-2020)
Resizing the filesystem on /dev/mmcblk0p2 to 2621440 (4k) blocks.
The filesystem on /dev/mmcblk0p2 is now 2621440 (4k) blocks long.
Vậy phải đưa đĩa cần thay đổi vào hệ thống đã khởi động (bằng đĩa khác). Tuy vậy khi đó việc thu nhỏ partition bằng fdisk vẫn có thể bị lỗi do dữ liệu bị mất đi ở bên ngoài partition mới.
An toàn nhất là dùng các phần mềm thay đổi kích thước partition có giao diện đồ họa, chúng di dời dữ liệu gọn gàng trước khi thay đổi kích thước partition.
Tuy nhiên, chạy RPi không màn hình thì chúng ta chỉ có giao diện dòng lệnh, để an toàn cần phải thay đổi thứ tự các câu lệnh, resize2fs để tạo lại hệ thống file cho phù hợp với kích thước đĩa mới (dự định), lệnh này còn di dời dữ liệu file vào trong khuôn khổ partition mới, sau đó mới xóa rồi tạo lại partition theo kích thước mới.
- Đưa đĩa vào hệ thống đã khởi động
- Chạy e2fsck để kiểm tra lỗi logic trên partition
- Chạy resize2fs để cập nhật hệ thống file trên đĩa theo kích thước mới 10G
resize2fs /dev/mmcblk0p2 10G - Dùng fdisk để xóa rồi tạo mới partition có kích thước mới