Nâng cấp Ubuntu: Hướng dẫn di chuyển hệ thống từ SSD di động sang PCIe 4.0

Di chuyển hệ thống Ubuntu không mất dữ liệu: Hướng dẫn nâng cấp từ SSD di động sang PCIe 4.0

Trong công việc phát triển và nghiên cứu hàng ngày, hiệu suất I/O phần cứng thường quyết định tốc độ biên dịch các dự án lớn, xây dựng Docker image và tải mô hình học sâu. Bài viết này ghi lại kế hoạch nâng cấp và di chuyển hệ thống Ubuntu trên desktop nhằm phá vỡ điểm nghẽn I/O hiện tại, đồng thời cung cấp tài liệu tham khảo chi tiết cho các hoạt động thực tế trong tương lai.

Tình trạng phần cứng và hướng nâng cấp

Cấu hình phần cứng hiện tại có hiệu ứng "thùng gỗ" nghiêm trọng:

  • CPU: Intel Core i9-14900K + 32GB RAM + RTX 3060 (hiệu suất cao)
  • Ổ đĩa hệ thống hiện tại: WD My Passport 1TB SSD di động (tốc độ đọc/ghi khoảng 1000MB/s, được kết nối qua USB và mount vào thư mục `/`)
  • Ổ đĩa dữ liệu nội bộ: 500GB SSD SATA (tốc độ đọc/ghi khoảng 500MB/s, mount vào thư mục Docker)
  • Ổ đĩa mới mục tiêu: SSD TiPlus 7100s 4TB (tốc độ đọc/ghi khoảng 7000MB/s, chưa cài đặt)

Vấn đề: Việc triển khai hệ điều hành và thư mục Docker có truy cập thường xuyên lên ổ SSD di động qua USB và ổ SATA tốc độ thấp đã hạn chế đáng kể hiệu năng của i9-14900K.

Hướng nâng cấp: Kế hoạch sử dụng ổ SSD 4TB mới với giao diện PCIe 4.0 làm ổ hệ thống chính, chứa hệ điều hành, môi trường Docker và dữ liệu nghiên cứu cốt lõi. Sau khi di chuyển, ổ SSD di động 1TB cũ có thể được dùng làm bản snapshot di động hoặc chuyển thành ổ dữ liệu sao lưu, trong khi ổ SSD 500GB tốc độ thấp sẽ được chuyển sang lưu trữ dữ liệu ít sử dụng.

Lựa chọn phương án chính: rsync so với dd

Trong quá trình di chuyển hệ thống Linux, thường có hai lựa chọn cơ bản: lệnh `dd` (sao cấp khu vực) và lệnh `rsync` (đồng cấp tệp). Kết hợp tình huống đặc biệt này - di chuyển từ 1TB lên 4TB và cần loại bỏ các phân vùng không thuộc hệ thống, chúng ta phân tích như sau:

1. Tại sao không chọn lệnh `dd`?

`dd` là phương pháp "sao chép vật lý" đơn giản và thô bạo. Nó sẽ sao chép tất cả các khu vực扇区 (bao gồm cả dữ liệu trống và bảng phân vùng lộn xộn) từ ổ cũ sang ổ mới một cách nguyên vẹn.

  • Bẫy xung đột UUID: `dd` sẽ sao chép cả UUID của phân vùng. Nếu cả hai ổ cũ và mới cùng cắm trên bo mạch chủ, hệ thống không thể xác định nên khởi động từ ổ nào, dễ dẫn đến lỗi mount.
  • Vấn đề dung lượng: Khi sao chép từ 1TB lên 4TB, 1TB đầu tiên của ổ mới sẽ có cấu trúc y hệt ổ cũ, phần còn lại 3TB sẽ trở thành "không gian chưa phân bổ", việc mở rộng phân vùng sau này bằng công cụ như `resize2fs` khá phức tạp.
  • Đưa vào các tạp chất: Ổ cũ có thể đã mount các phân vùng dữ liệu khác không cần thiết (như vài GB thư viện cá nhân), `dd` không thể loại bỏ chúng.

2. Ưu điểm của việc chọn `rsync`

Phương án `rsync` kết hợp với `chroot` giống như "chuyển nhà có chọn lọc". Chuẩn bị trước phân hoàn hảo trên ổ mới, sau đó chỉ đồng bộ các tệp hệ thống hữu ích. Phương pháp này sẽ tự động tạo UUID riêng cho phân vùng mới, không chỉ giải quyết vấn đề xung đột mà còn tận dụng ngay toàn bộ dung lượng 4TB, là phương pháp tốt nhất để xây dựng hệ thống mới sạch sẽ.

Hướng dẫn di chuyển sử dụng rsync + chroot

Chương này là hướng dẫn từng bước cho hoạt động di chuyển thực tế. Toàn bộ quá trình có thể thực hiện trực tiếp trên hệ thống Ubuntu đang chạy mà không cần USB khởi động thêm.

Bước 1: Cài đặt ổ mới và khởi tạo phân vùng

Cắm ổ SSD 4TB mới vào khe M.2 PCIe 4.0 kết nối trực tiếp với CPU trên bo mạch. Khởi động máy và trong terminal, xác định thiết bị mới (giả sử là `/dev/nvme0n1`), sử dụng `cfdisk` để phân vùng:

sudo cfdisk /dev/nvme0n1

Chọn định dạng `gpt`, tạo ba phân vùng để tương ứng với cấu trúc hệ thống gốc:

  • Phân vùng 1: 1GB, loại `EFI System` (tương ứng `/boot/efi`)
  • Phân vùng 2: 2GB, loại `Linux filesystem` (tương ứng `/boot`)
  • Phân vùng 3: Còn lại toàn bộ dung lượng, loại `Linux filesystem` (tương ứng `/`)

Bước 2: Định dạng phân vùng mới và tạm thời mount

# Định dạng phân vùng (đảm bảo nvme0n1p1/p2/p3 tương ứng đúng phân vùng)
sudo mkfs.fat -F32 /dev/nvme0n1p1
sudo mkfs.ext4 /dev/nvme0n1p2
sudo mkfs.ext4 /dev/nvme0n1p3

# Xây dựng cây thư mục hệ thống mới tạm thời tại /mnt
sudo mount /dev/nvme0n1p3 /mnt
sudo mkdir -p /mnt/boot/efi
sudo mount /dev/nvme0n1p2 /mnt/boot
sudo mount /dev/nvme0n1p1 /mnt/boot/efi

Bước 3: Thực hiện đồng bộ hình ảnh hệ thống

Sử dụng `rsync` để sao chép tệp hệ thống. Tham số `--exclude` ở đây rất quan trọng, nó sẽ ngăn chặn các thư mục ảo khi hệ thống chạy và ổ dữ liệu bên ngoài, đảm bảo chỉ đồng bộ các tệp hệ thống thuần túy.

sudo rsync -aAXHv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /mnt/

Bước 4: Cập nhật cấu hình mount (fstab)

Ổ mới đã tạo UUID hoàn toàn mới, phải cập nhật tệp cấu hình để hệ thống chỉ định mount đúng cách.

  1. Xem UUID của ổ mới:
    sudo blkid | grep nvme0n1
  2. Chỉnh sửa tệp fstab trong môi trường hệ thống mới:
    sudo nano /mnt/etc/fstab
    Thay thế UUID cũ của `/`, `/boot`, `/boot/efi` bằng các giá trị mới vừa tìm thấy, lưu và thoát.

Bước 5: Tái tạo引导 (Chroot & GRUB)

Để ổ mới có khả năng khởi động độc lập, cần vào môi trường ảo của hệ thống mới để cài đặt GRUB.

# Mount các hệ thống tệp ảo
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo mount --bind /run /mnt/run

# Chuyển vào môi trường hệ thống mới
sudo chroot /mnt

# Cài đặt chương trình khởi động GRUB trong môi trường mới
grub-install /dev/nvme0n1
update-grub

# Thoát và卸载
exit
sudo umount /mnt/run /mnt/sys /mnt/proc /mnt/dev /mnt/boot/efi /mnt/boot /mnt

Bước 6: Khởi động lại và chuyển đổi

Sau khi tắt máy, **tháo ổ SSD di động cũ**, vào BIOS/UEFI của bo mạch, thiết lập ổ NVMe 4TB mới vừa lắp làm thiết bị khởi động đầu tiên. Sau khi vào hệ thống thành công, bạn có thể trải nghiệm sự mượt mà tuyệt đối mà PCIe 4.0 mang lại.

Thảo luận nâng cao: Tính di động môi trường và kế hoạch hệ thống kép

Khi lập kế hoạch di chuyển, cần xem xét các thay đổi trong kịch bản làm việc trong tương lai (như mang hệ thống đi đào tạo từ xa) và tận dụng sâu sắc tài nguyên phần cứng.

1. Làm thế nào để cân bằng giữa hiệu suất tối đa và tính di động?

  • Bản snapshot song song: Sau khi sử dụng `rsync` để di chuyển, nếu không định dạng lại ổ SSD di động 1TB cũ, nó thực chất trở thành một bản "sao lưu hệ thống hoàn hảo". Khi đi ra ngoài, chỉ cần mang theo ổ cũ, cắm vào bất kỳ máy tính nào vẫn có thể khởi động lại môi trường phát triển quen thuộc.
  • Tách biệt môi trường và dữ liệu: Kỹ thuật phần mềm hiện đại đề cao sự tách biệt. Sử dụng Docker để container hóa môi trường học sâu, sử dụng Git và Submodules để quản lý cấu hình (dotfiles) của Emacs/Zsh. Sử dụng ổ mới để tận hưởng hiệu suất cao hàng ngày, khi đi ra ngoài chỉ cần kéo các cấu hình từ đám mây để nhanh chóng phục hồi môi trường.

2. Kế hoạch không gian dự trữ: Cài đặt Windows hệ thống kép

Nếu chọn sử dụng lệnh `dd` để di chuyển (mặc dù không khuyến nghị), sẽ tạo ra 3TB không gian chưa phân bổ, phần này có thể được sử dụng để cài đặt Windows tạo thành hệ thống kép. **Lưu ý:** Chương trình cài đặt Windows cực kỳ "bá đạo", nó sẽ phát hiện và chiếm lấy phân vùng EFI hiện có, buộc ghi đè mục khởi động mặc định của hệ thống. Sau khi cài đặt xong, Ubuntu có vẻ sẽ "biến mất". **Giải pháp:** Khi đó không cần hoảng hốt, khởi động vào menu tạm thời của BIOS (Boot Menu), chọn thủ công vào Ubuntu. Trong terminal, chạy lệnh `sudo update-grub`, GRUB sẽ quét lại và phát hiện Windows, sửa lại menu khởi động kép.

Thẻ: Ubuntu ssd PCIe rsync di chuyển hệ thống

Đăng vào ngày 18 tháng 6 lúc 05:29