File img không chỉ chứa dữ liệu mà còn chứa cấu trúc đĩa, bao gồm kiểu đĩa (MBR, GPT… ), kiểu partition (fat32, ext4…), PARTUUID, kích thước partition… nên nếu cần sao chép tất cả thì chúng ta tạo bản sao của đĩa bằng lệnh dd
dd if=/path/to/img of=/tên/đĩa/copy bs=2M dd if=/tmp/2019-10-15.os.img of=/dev/sdb bs=4M
Tuy nhiên trong trường hợp định dạng đĩa có rồi, chỉ cần phục hồi dữ liệu thôi thì chúng ta cần mount partition của file img.
Khi chúng ta gắn USB Flash vào máy, hệ thống sẽ tự động phát hiện có thiết bị mới và Windows gán cho một tên ổ đĩa, Linux gán cho một tên thư mục /hoặc không auto mount. Đối với file img, chúng ta phải có thao tác gán file vào hệ thống, tương tự như gắn USB flash như trên, sau đó mount vào thư mục.
sudo losetup -Pf /path/to/img sudo losetup -Pf /tmp/2019-10-15.os.img
- -f, –find Tìm thiết bị đầu tiên chưa dùng (loop0)
- -P, –partscan Tìm và tạo các partition (từ file img)
Kiểm tra việc gán vào hệ thống
lsblk
File img đã được nhận như thiết bị /dev/loop0 với các partition loop0p1 và loop0p2.
Để làm việc với file của các partition, chúng ta mount partition với một thư mục nào đó
mkdir /tmp/rootfs sudo mount /dev/loop0p2 /tmp/rootfs
Sau đó đồng bộ dữ liệu (phục hồi) với thư mục / hiện tại
sudo rsync -avx --delete /tmp/rootfs/ / ## (1)
–delete để xóa các file lạ không có trong nguồn /tmp/rootfs
Thậm chí không cần rsync, chúng ta có thể chỉ copy những file cần thiết từ /tmp/rootfs
Tóm lại, làm việc với data trên file img chỉ cần qua 2 bước
sudo losetup -Pf /path/to/img sudo mount /dev/loop_part /folder
Để kết thúc, tháo đĩa ảo ra
sudo umount /tmp/rootfs sudo losetup -d /dev/loop0
Chú thích
Ngược lại, có thể cập nhật file backup img bằng câu lệnh
sudo rsync -avx --delerte / /tmp/rootfs ## (2)