Hướng dẫn Resize RootFS OpenWRT (Expand root) áp dụng cho ext4, squashfs
Nghia Phan
Update:
8 phút
Updating...
Ads top post
Khi flash OpenWRT vào các bộ nhớ như MicroSD hoặc USB (RaspberryPi, NanoPi, OrangePI...) thì OpenWRT chỉ sử dụng một phần của bộ nhớ trên thẻ hoặc USB
Kể cả khi bộ nhớ USB hoặc MicroSD có dung lượng lớn như 32Gb hoặc 64Gb... thì OpenWRT cũng chỉ sử dụng đâu đó khoảng vài trăm MB.
Điều này sẽ khiến bạn không thể tận dụng tối đa bộ nhớ để cài các package bổ sung hoặc các ứng dụng yêu cầu nhiều bộ nhớ như Docker, PassWall...
Bài viết này sẽ hướng dẫn các bạn mở rộng bộ nhớ rootfs của Openwrt để tận dụng tối đa dung lượng SDcard hoặc USB
Có 2 cách để Resize Rootfs.
Cách 1 là dùng script tự động, được openwrt hướng dẫn, áp dụng được cho ext4 và squashfs.
Cách 2 là làm thử công áp dụng với ext4 dành cho các bạn chạy script bị lỗi hoặc muốn chắc chắn từng bước
Cách 2 có tham khảo quá trình làm của thành viên
jeremienguyen
diễn đàn VOZ.VN
Thiết bị bạn ấy sử dụng là NanoPi R2S
Với thẻ SDcard 32Gb
Filesystem sử dụng là EXT4
Sử dụng PuTTY hoặc các SSH client khác để đăng nhập OpenWRT SSH
Kết nối Router với Internet trước khi làm
Khác biệt cơ bản giữa EXT4 với SquashFS là gì?
Đầu tiên và cơ bản nhất đó là SquashFS là Filesystem chỉ đọc (READONLY) trong khi đó EXT4 có thể ĐỌC-GHI (READ-WRITE)
Hiểu nôm na thì khi sủ dụng phân vùng SquashFS lúc boot lên, toàn bộ rootfs sẽ được mount qua một lớp Filesystem khác gọi là OverlayFS (FS này có 2 lớp, lớp dưới chỉ đọc và lớp trên là đọc-ghi), khi các bạn chỉnh sửa hay xóa file trong hệ thống thì nó chỉ ghi vào lớp trên. Nếu reset về mặc định thì lớp trên bị xóa đi, tất cả mọi thứ sẽ trở về ban đầu nhờ có lớp dưới. Cũng có trường hợp không sử dụng OverlayFS thay vào đó là UBIFS... nhìn chung thì chúng ta không thể chỉnh sửa file trực tiếp lên phân vùng SquashFS
Phân vùng EXT4 thì khác. Lúc boot, hệ thống sẽ sử dụng trực tiếp phân vùng EXT4. Điều này có nghĩa là khi bạn xóa hay chỉnh sửa một file, hệ thống sẽ đọc ghi trực tiếp lên phân vùng, kể cả sau khi reset thì bạn cũng không thể khôi phục nó về ban đầu. (Chỉ có cách là Flash lại toàn bộ hệ thống)
Bởi vì SquashFS lúc boot sẽ phải mount qua 1 FS khác (OverlayFS) cho nên sẽ mất 1 vài giây or vài chục giây tùy vào dung lượng của phân vùng và tốc độ đọc ghi của bộ nhớ cho nên nó chỉ được sử dụng cho các system có dung lượng nhỏ và tốc độ đọc ghi trung bình (Nand, SPI...).
Cách 1 - Script tự động
Chức năng của script:
Hỗ trợ ext4 và squashfs.
Tự động xác định phân vùng root và file hệ thống.
Mở rộng phân vùng root sử dụng bộ nhớ còn trống.
Script vẫn được giữ lại sau khi upgrade firmware.
Tự động chạy sau khi upgdare firmware.
Đăng nhập SSH vào router sau đó chạy lệnh sau để tạo script (Copy toàn bộ script rồi dán vào Terminal)
Kiểm tra thông tin phân vùng hiện tại trước khi resize
df -h
# Thông tin trả về tương tự như sau
# Filesystem Size Used Available Use% Mounted on
# /dev/root 102.4M 14.5M 85.8M 14% /
# tmpfs 495.8M 1.1M 494.7M 0% /tmp
# tmpfs 512.0K 0 512.0K 0% /dev
# Chúng ta có thể thấy, Rootfs chỉ sử dụng có 102.4M trong tổng số 32Gb của thẻ nhớ.
Dùng Parted để resize phân vùng root
parted
# GNU Parted 3.6
# Using /dev/mmcblk0
# Welcome to GNU Parted! Type 'help' to view a list of commands.
# (parted)
Gõ lần lượt các lệnh
print
# hiện thông tin phân vùng trên thẻ
resizepart 2 100%
# resize phân vùng 2
# nhập yes nếu được hỏi
print
# hiện thông tin sau khi resize
quit
# Thoát
root@OpenWrt:~# parted
GNU Parted 3.4
Using /dev/mmcblk0
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: SD LX32G (sd/mmc)Disk /dev/mmcblk0: 31.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 33.6MB 50.3MB 16.8MB primary ext2 boot
2 67.1MB 176MB 109MB primary ext2
(parted) resizepart 2 100%
Warning: Shrinking a partition can cause data loss, are you sure you want to continue? Yes/No? yes
(parted) print
Model: SD LX32G (sd/mmc)Disk /dev/mmcblk0: 31.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 133.6MB 50.3MB 16.8MB primary ext2 boot
2 67.1MB 30.0GB 29.9GB primary ext2
(parted) quit
Information: You may need to update /etc/fstab.
root@OpenWrt:~#
Nếu quá trình nhập lệnh resizepart 2 100% gặp lỗi Warning: Partition /dev/mmcblk0p2 is being used. Are you sure you want to continue? thì các bạn nhập n để dừng quá trình resize sau đó hãy thoát parted (quit) rồi chạy lệnh umount /dev/mmcblk0p2 và làm lại.
Sau khi hoàn thành các lệnh Parted chạy tiếp các lệnh sau
# Remount root sang ReadOnly (Nếu báo lỗi, hãy reboot rồi làm lại)
mount -o remount,ro /
# Lệnh kiểm tra phân vùng (nhập y nếu được hỏi)
tune2fs -O^resize_inode /dev/mmcblk0p2
fsck.ext4 /dev/mmcblk0p2
# Reboot router
reboot
Sau khi Router reboot xong, tiến hành chạy lệnh resize2fs
root@OpenWrt:~# mount -o remount,ro /
root@OpenWrt:~# tune2fs -O^resize_inode /dev/mmcblk0p2
tune2fs 1.47.0 (5-Feb-2023)root@OpenWrt:~# fsck.ext4 /dev/mmcblk0p2
e2fsck 1.47.0 (5-Feb-2023)rootfs contains a file system with errors, check forced.
Filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks is 7; should be zero. Fix<y>? yes
Resize_inode not enabled, but the resize inode is non-zero. Clear<y>? yes
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
Block bitmap differences: -(2--8) -427
Fix<y>? yes
Free blocks count wrong for group #0 (15291, counted=15299).Fix<y>? yes
Free blocks count wrong (15291, counted=15299).
Fix<y>? yes
Padding at end of inode bitmap is not set. Fix<y>? yes
rootfs: ***** FILE SYSTEM WAS MODIFIED *****
rootfs: ***** REBOOT SYSTEM *****
rootfs: 1513/6656 files (0.0% non-contiguous), 11325/26624 blocks
root@OpenWrt:~# reboot
Sau khi reboot:
1
2
3
4
5
root@OpenWrt:~# resize2fs /dev/mmcblk0p2
resize2fs 1.47.0 (5-Feb-2023)Filesystem at /dev/mmcblk0p2 is mounted on /; on-line resizing required
old_desc_blocks= 1, new_desc_blocks=2The filesystem on /dev/mmcblk0p2 is now 7307834(4k) blocks long.
Nhập lệnh df -h để kiểm tra thành quả
1
2
3
4
5
root@OpenWrt:~# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 7.3G 14.5M 27.5G 0% /
tmpfs 495.8M 68.0K 495.7M 0% /tmp
tmpfs 512.0K 0 512.0K 0% /dev
Góp Ý / Bình Luận / Đánh giá