Sao chép laptop bằng NVMe TCP
- Gần đây tôi mua một chiếc laptop mới và cần thiết lập nó để sử dụng.
- Tôi không có hứng lặp lại các bước vốn đã quen thuộc.
- Theo gợi ý của một đồng nghiệp, tôi cân nhắc cách sao chép ổ đĩa cũ sang laptop mới.
Những băn khoăn về quá trình sao chép
- Tôi không có công cụ để mở laptop cũ và kết nối ổ đĩa mới qua USB.
- Tôi đang dùng mã hóa toàn bộ ổ đĩa, laptop cũ dùng NVME 512GB còn laptop mới dùng NVME 1TB.
- Tôi không quen với việc thay đổi kích thước phân vùng LUKS.
Đề xuất của đồng nghiệp
- Anh ấy đề xuất dùng NVME over TCP để chia sẻ ổ đĩa qua mạng và thực hiện sao chép toàn bộ ổ đĩa.
- Các bước được đề xuất như sau:
- Xuất ổ đĩa từ laptop cũ bằng
nvmet-tcp.
- Thực hiện sao chép ổ đĩa sang laptop mới.
- Thay đổi kích thước phân vùng để dùng toàn bộ 1TB.
- Thay đổi kích thước LUKS.
- Cuối cùng thay đổi kích thước ổ gốc BTRFS.
Xuất ổ đĩa qua NVME TCP
systemd-storagetm.service được đề xuất là cách dễ nhất.
- Thay vào đó, tôi khởi động cả hai laptop bằng GRML rescue CD và thực hiện các bước xuất ổ NVME bằng mô-đun
nvmet-tcp.
Sao chép ổ đĩa
- Tôi dùng lệnh
dd để sao chép ổ gốc sang laptop mới.
- Laptop mới không có cổng Ethernet nên tôi buộc phải chỉ dùng Wi‑Fi, và mất khoảng 7 tiếng rưỡi để sao chép toàn bộ 512GB.
- Tốc độ sao chép vào khoảng 18-20MB/s.
Thay đổi kích thước phân vùng và vùng chứa LUKS
- Khi chạy
parted, nó phát hiện bảng phân vùng không khớp với kích thước ổ đĩa và yêu cầu sửa lại.
- Tôi cài
cloud-guest-utils rồi dùng growpart để mở rộng phân vùng lên 1TB.
- Tôi dùng
cryptsetup-resize để tăng kích thước vùng chứa LUKS.
- Sau khi đăng nhập vào hệ thống, tôi thay đổi kích thước hệ thống tệp BTRFS.
Kết luận
- Lợi ích duy nhất của quá trình này là khi dùng laptop mới, bạn vẫn có cảm giác như đang dùng chiếc laptop cũ.
- Thông thường tôi mất 1 đến 2 tuần để thiết lập một laptop mới, nhưng trong trường hợp này tôi đã tiết kiệm được khoảng thời gian đó.
- Một lợi ích bổ sung là tôi đã học được cách xuất ổ đĩa bằng NVME over TCP.
Ý kiến của GN⁺
- Việc sao chép laptop bằng NVME over TCP đưa ra một cách hiệu quả để chuyển nhanh môi trường hệ thống hiện có sang phần cứng mới.
- Kỹ thuật này có thể hấp dẫn với quản trị viên hệ thống hoặc nhà phát triển như một cách tiết kiệm thời gian và giảm thiểu lỗi cấu hình.
- Tuy nhiên, nó phụ thuộc rất nhiều vào tốc độ mạng, và nếu chỉ dùng Wi‑Fi thì có thể mất khá nhiều thời gian, đây là một nhược điểm cần cân nhắc.
- Dù có các công cụ như Clonezilla hay Acronis cung cấp chức năng tương tự, NVME over TCP vẫn có lợi thế riêng là cho phép truy cập ổ đĩa trực tiếp qua mạng.
- Khi áp dụng kỹ thuật này, cần có đủ kiến thức về cấu hình mạng, xử lý ổ đĩa được mã hóa và thay đổi kích thước hệ thống tệp.
1 bình luận
Bình luận trên Hacker News
Trong kịch bản của tác giả, không có lợi ích gì khi dùng NVMe/TCP. Vì chỉ đơn giản dùng
ddđể thực hiện sao chép khối tuần tự nên không tận dụng được I/O đồng thời. Các lệnh phức tạp có thể được thay bằngnetcatđơn giản.$ nc -l -p 1234 | dd of=/dev/nvme0nX bs=1M.$ nc x.x.x.x 1234 </dev/nvme0nX.ddsẽ đệm thao tác ghi để nhanh và hiệu quả hơn. Nếu thêmgzip/gunzipở phía nguồn/đích thì khi ổ đĩa chưa đầy, toàn bộ quá trình sẽ nhanh hơn nhiều. Đây là cách yêu thích của tôi để tạo image PC qua mạng. Nên truyền tùy chọn--fastchogzip, hoặc thay bằnglz4/unlz4nhanh hơn. Gần đây tôi đã dùng cách này để tạo image cho một laptop Windows mới với NVMe 1TB, mất khoảng 20 phút qua GigE và image thu được là 20GB. Tôi thường lưu imagelz4này để sao lưu, rồi vài năm sau khi đem tặng laptop thì khôi phục bằngunlz4 | dd. Rất tiện.nvme-tcp, nhưng ngày nào cũng học được điều mới. Tính hữu dụng của mô-đun này nằm nhiều hơn ở việc mount hệ thống tệp trên NVMe từ xa thay vì truy cập thô bằngdd.dd bs=Xkhông cần lớn hơn mức đó. Tuy vậy,bs=1Mcũng không gây hại (nó sẽ đệm các lần đọc 64kB cho tới khi thành 1MB) và vẫn dùng được trong tương lai nếu kích thước pipe tăng lên. Một số phiên bảnnetcatcó tùy chọn điều khiển kích thước khối vào và ra, giúp giảm nhu cầu dùngdd bs=X, nhưng trên các đĩa cứu hộ hệ thống thì thường dùng binarynetcatkhông có các tùy chọn đó.Dùng
nbdkitvànbdcopysẽ đơn giản hơn nhiều.nbdkit file /dev/nvme0n1nbdcopy nbd://otherlaptop localfileKhi phải thiết lập laptop mới, việc truyền qua cáp USB-C ở tốc độ 10Gb/s rất hữu ích. Lựa chọn khác khi đó chỉ có WiFi.
rsync. Có vẻ như liên kết đã bão hòa nên dùng giao thức khác cũng không có ý nghĩa.Gần đây tôi phải sao chép khoảng 200GB tệp qua WiFi. Tôi dùng
rsyncđể nếu kết nối bị rớt thì không phải bắt đầu lại từ đầu, nhưng vẫn mất ít nhất 6 tiếng. Không biết có cách nào tốt hơn không.ddthì nhận được bảo đảm gì? Có cần so sánh md5 của thiết bị khối kết quả không?Tôi không hiểu vì sao tác giả không pipe
btrfsqua mạng. Trước tiên tạo một snapshotbtrfs, sau đó dùngbtrfs send => nc => network => nc => btrfs receiveđể chỉ truyền các khối đang được sử dụng.Trước đây khi chuyển dữ liệu giữa các laptop, tôi đã chạy một trình cài đặt kết hợp
ddvàncở cả hai phía. Nếu nhớ không nhầm, tôi cũng thêmgzipđể tăng tốc truyền.Nếu dùng
Clonezillathì chỉ sao chép các khối dữ liệu thực sự có dữ liệu và có thể tự động điều chỉnh phân vùng. Tôi luôn dùng cách này.Trong nhiều thập kỷ, tôi thực ra chưa bao giờ "cài đặt" hệ điều hành, mà chỉ sao chép tệp rồi điều chỉnh khi cần. Thường tôi xem đây là cơ hội để tạo hệ thống tệp mới và cập nhật loại hệ thống tệp/tham số (ví dụ: kích thước khối), mã hóa, v.v., rồi truyền tệp bằng
rsync.NixOS. Khi đó chỉ cần sao chép cấu hình rồi tự động cài đặt lại mọi thứ.Không thấy ai nhắc đến FDT(Fast Data Transfer).
-limit <rate>. Có thể dùng hậu tố K(KiloBytes/s), M(MegaBytes/s), G(GigaBytes/s).