Sau khi chép file ảnh Hệ điều hành (OS) của RPI thên thẻ nhớ bằng Win32DiskImager, thẻ nhớ được tạo 2 phân vùng, một phân vùng boot có định dạng FAT32 60MB và một phân vùng OS dung lượng từ vài trăm MB đến dưới 3GB. Người dùng thường mở rộng phân vùng OS đến hết phần trống của đĩa. Thí dụ Raspbian sau khi ghi vào thẻ nhớ chiếm dung lượng 2.2GB, nếu dùng thẻ nhớ dung lượng 8GB thì cần phải mở rộng phân vùng OS thêm hơn 5GB để tránh lãng phí đĩa.
Tuy có thể backup các phân vùng RPI bằng lệnh dd hay dd_rescue, nhưng các phần mềm này backup toàn phân vùng, nghĩa là file backup có dung lượng 8GB. Hơn nữa, mặc dù các file của OS không cần có thứ tự hay chiếm một vị trí đặc biệt nào trên phân vùng, nhưng cũng khó có thể sao lưu bằng cách copy toàn bộ dữ liệu trên phân vùng OS vì có nhiều thư mục ảo được mount khi khởi động.
Phương pháp sau đây dùng lệnh rsync, người dùng lựa chọn các bước theo nhu cầu.
A. Backup các phân vùng của RPI
Nối ổ đĩa dùng chứa file backup vào RPI và mount nó (thí dụ vào thư mục /mnt/backup). Chạy lệnh sau đây để sao chép các file của thẻ nhớ vào /mnt/backup
rsync -av /boot /mnt/backup/boot
rsync -avx / /mnt/backup/OS
Tham số -x hay –one-file-system chỉ định rsync không vượt quá hệ thống file khi đệ qui, nghĩa là chỉ bao gồm các file của hệ điều hành và ứng dụng của người dùng cài đặt, không tính đến các thư mục được mount. Kết quả của lệnh này là /mnt/backup/OS chứa tất cả file của phân vùng OS và /mnt/backup/boot chứa các file của phân vùng boot.
B. Tạo các phân vùng boot và OS trên thẻ nhớ mới
- Sau khi gắn thẻ nhớ mới vào card reader trên RPI, chạy lệnh fdisk -l để biết tên của đĩa (Tìm các dòng Disk /dev/sdx : nnn GB, mmm bytes. So sánh với dung lượng của thẻ mới gắn vào để xác định tên của đĩa, thí dụ /dev/sda hay /dev/sdb…)
- Tiếp theo chạy lệnh fdisk tên_đĩa để chia phân vùng (thí dụ fdisk /dev/sdb)
- Trong lệnh fdisk, gõ p để liệt kê các phân vùng, n để tạo phân vùng mới, d để xóa phân vùng, t để xác định kiểu phân vùng (c=FAT32, 87=NTFS, EXT4 là mặc định) và cuối cùng w để ghi kết quả các lệnh đã thực hiện xuống đĩa và thoát khỏi fdisk. Trong mỗi bước đều có thể gõ m để đọc hướng dẫn, gõ enter để chấp nhận gợi ý mặc định và gõ q để thoát mà không thực hiện tất cả các lệnh trước đó.
- Format phân vùng FAT32 bằng lệnh mkfs.msdos -F 32 tên_phân vùng (thí dụ mkfs.msdos -F 32 /dev/sda1)
- Format phân vùng ext4 bằng lệnh mkfs.ext4 tên_phân_vùng (thí dụ mkfs.ext4 /dev/sda2)
- Để format phân vùng ntfs cần có ntfs-3g, cài đặt bằng lệnh apt-get install ntfs-3g. Sau đó format phân vùng ntfs bằng lệnh mkfs.ntfs tên_phân_vùng (thí dụ mkfs.ntfs /dev/sda3). Thêm tham số -L Nhãn_đĩa nếu cần
C. Retore các file sao lưu lên thẻ nhớ mới
Giả sử thẻ nhớ cần restore đã có 2 phân vùng boot và OS, đã format phân vùng boot và OS, đĩa backup có hai thư mục /boot và /OS.
- Các phân vùng của thẻ nhớ được mount vào thư mục /mnt/restore/boot và /mnt/restote/OS. Đĩa backup được mount vào thư mục /mnt/backup. Chạy lệnh sau đây để restore các file đã sao lưu
rsync -av /mnt/backup/boot /mnt/restore/boot
rsync -av /mnt/backup/OS /mnt/restore/OS
- Để chắc chằn thẻ mới restore có thể khởi động được, cần tìm UUID của phân vùng OS (thí dụ /dev/sdb2) bằng lệnh blkid /dev/sdb2 và thay UUID vào chuổi root= trong /mnt/restore/boot/cmdline.txt
D. Tạo bản sao của thẻ nhớ đang dùng lên thẻ nhớ mới
- Gắn thẻ nhớ mới vào card reader trên RPI và tạo hai phân vùng boot và OS và format chúng như trong mục B
- Tạo các thư mục /mnt/backup và /mnt/backup/boot
mkdir /mnt/backup mkdir /mnt/backup/boot
- Mount phân vùng OS với thư mục /mnt/backup và phân vùng boot với thư mục /mnt/backup/boot
mount /dev/mmcblk1 /mnt/backup mount /dev/mmcblk0 /mnt/backup/boot
- Chạy lệnh sau để clone thẻ đang dùng sang thẻ mới
rsync -avx / /boot /mnt/backup/
E. Công cụ clone thẻ nhớ của RPI
rpi-clone có thể clone các file của RPI sang một thẻ nhớ khác dung lượng.
Chạy các lệnh sau để tải về công cụ rpi-clone
git clone https://github.com/billw2/rpi-clone.git
cd rpi-clone
cp rpi-clone /usr/local/sbin
Sử dụng:
rpi-clone sdX {-f|--force-initialize} {-v|--verbose}
Thí dụ:
rpi-clone sda
-v liệt kê tên các file đang copy
-f khởi tạo partition trên thẻ mới. Nếu không dùng -f và trên thẻ mới có các partition thích hợp thì rpi-clone dùng các partition đó