Lưu ý: Bài viết này được tôi thử nghiệm trên Debian và Ubuntu thành công nên các hệ thống Linux sử dụng Grub làm Bootloader đều có thể áp dụng tương tự .
I. Mở đầu
Đôi khi trong quá trình sử dụng Linux bạn sẽ có ý định chuyển phân vùng cài đặt của Linux sang một phân vùng khác hoặc ổ đĩa khác. Có thể là phân vùng hoặc ổ đĩa hiện tại có dung lượng không đủ cho nhu cầu sắp tới của bạn, hoặc có thể bạn muốn di chuyển phân vùng cài đặt Linux ra phía rìa ngoài của đĩa cứng nhằm tăng tốc độ đọc/ghi phân vùng đó http://vi.wikipedia.org/wiki/%E1%BB%94_%C4%91%C4%A9a_c%E1%BB%A9ng#Ph.C3.A2n_v.C3.B9ng_.28Partition.29).
Về cơ bản, mọi thứ trên Linux/Unix đều là file http://www.linux.org/article/view/in-linux-everything-is-a-file), do vậy, chúng ta có thể hình dung được rằng để di chuyển phân vùng cài đặt Linux sang nơi khác thì đơn giản chỉ cần copy toàn bộ thư mục root (/) của nó sang vị trí mới, sau đó chỉ cần cài lại Grub và chỉnh sửa file /etc/fstab là được.
II. Các bước thực hiện
Lý thuyết đã có rồi, bây giờ chúng ta bắt tay vào thực hiện:
Bước 1: Chuẩn bị một Live CD hoặc Live USB
Tại sao vậy? Trong quá trình chuyển có thể gặp một số lỗi (do người thực hiện áp dụng không đúng cách hoặc do bạn đọc bài viết này sau 10 năm kể từ ngày nó được viết khiến nó quá lỗi thời) khiến hệ thống không thể khởi động được. Khi đó bạn có thể sử dụng một Live CD hoặc Live USB để boot vào và sửa lỗi.
Khuyến cáo bạn nên tạo Live CD, USB từ Ubuntu và Linux Mint vì nó chứa sẵn công cụ phân vùng Gparted (không biết các distro khác có thế không).
Lưu ý là các bước trong bài viết này các bạn làm trên hệ thống hiện tại, Live CD, USB chỉ sử dụng khi bạn gặp lỗi nào đó và không boot được vào hệ thống thôi.
Bước 2: Tạo phân vùng mới để chứa thư mục root
Để tạo một vân vùng mới thì có nhiều cách. Đơn giản nhất là sử dụng công cụ phân vùng có giao diện đồ họa như Gparted, công cụ này được cài đặt sẵn nếu bạn tạo Live CD và USB từ Ubuntu hoặc Linux Mint.
Một cách khác là sử dụng fdisk, cách phân vùng với fdisk các bạn có thể đọc ở bài viết này http://www.tldp.org/HOWTO/Partition/fdisk_partitioning.html. Nó thật sự không quá khó nhưng tốt nhất bạn nên cẩn thận vì thao tác phân vùng luôn luôn tiềm ẩn rủi ro.
Bước 3: Sao chép root sang phân vùng mới
Để dễ hình dung, tôi ví dụ hiện trạng phân vùng của đĩa như sau:
Code:
sda disk
├─sda1 part --> phân vùng bạn vừa tạo và muốn chuyển đến
├─sda2 part swap
├─sda3 part / --> phân vùng chứa thư mục / hiện tại
Bây giờ, gõ lệnh sau để format phân vùng sda1 với hệ thống file EXT3 (lưu ý là nếu phân vùng cũ là EXT2 hoặc EXT4 thì bạn không format với EXT3 mà phải format với file system tương ứng):
Code:
Tiếp theo, mount phân vùng sda1 vào:
Code:
# mkdir /mnt/newroot
# mount /dev/sda1 /mnt/newroot
Bây giờ copy toàn bộ nội dung phân vùng / sang phân vùng mới:
Code:
Xem thêm về lệnh copy tại đây http://tldp.org/HOWTO/Hard-Disk-Upgrade/copy.html.
Bước 4: Sửa lại file /etc/fstab
Làm theo các lệnh sau:
Code:
# cd /mnt/newroot
# vi etc/fstab
Tìm đến dòng định nghĩa mount point của phân vùng / (lưu ý là chuỗi UUID có thể khác trên máy bạn):
Code:
UUID=b9d62595-e95c-45b1-8a46-2c0b37fcf153 / ext3 noatime,errors=remount-ro 0 1
hoặc
Code:
/dev/sda3 / ext3 noatime,errors=remount-ro 0 1
sửa lại thành:
Code:
/dev/sda1 / ext3 noatime,errors=remount-ro 0 1
Bạn cũng có thể sử dụng UUID thay vì /dev/sda1, cách kiểm tra UUID của các phân vùng các bạn gõ lệnh sau:
Code:
Bước 5: Cài lại Grub
Cách 1: Cài trực tiếp luôn (nếu không được thì các bạn dùng cách 2)
Gõ lệnh sau để cài lại Grub:
Code:
# grub-install --root-directory=/mnt/newroot /dev/sda
Cách 2: Change root (chroot) rồi cài
Mount các thư mục ảo vào thư mục root mới:
Code:
# mount -o bind /dev /mnt/newroot/dev
# mount -t proc none /mnt/newroot/proc
# mount -t sysfs none /mnt/newroot/sys
Tiến hành chroot (change root):
Code:
Cài lại grub:
Code:
Update grub (nếu cần):
Code:
Nếu không có thông báo lỗi nào thì có nghĩa là bạn đã thành công.
Exit ra và khởi động lại máy:
Code:
Bước 6: Sửa một số thứ (nếu có)
Trong quá trình bạn tạo phân vùng mới hoặc xóa phân vùng cũ có thể dẫn đến việc các phân vùng được đánh số lại. Ví dụ lúc trước phân vùng swap của bạn là sda2, nhưng sau khi phân vùng thì nó là sda3 chẳng hạn, khi đó bạn cần sửa lại file /etc/fstab cho phù hợp.
Trường hợp tương tự cũng xảy ra nếu các thư mục như /home, /boot được đặt ở phân vùng riêng.
III. Các lỗi và câu hỏi thường gặp
1. Tôi không thể boot vào hệ thống, có lỗi gì đó liên quan đến Grub
Bạn hãy boot vào bằng Live CD hoặc Live USB rồi cài lại Grub.
Cách cài lại không khó, bạn có thể cài đặt công cụ có giao diện đồ họa Boot Repair https://help.ubuntu.com/community/Boot-Repair) và sửa một cách hoàn toàn tự động.
Hoặc có thể cài lại bằng cách làm như sau:
- Mount phân vùng chứa thư mục root của hệ thống (ví dụ nó đang ở sda1):
Code:
# mkdir /mnt/myroot
# mount /dev/sda1 /mnt/myroot
- Mount thư mục /boot nếu bạn đặt /boot ở phân vùng khác
- Cài lại Grub:
Code:
# grub-install --root-directory=/mnt/myroot /dev/sda
2. Tôi khởi động được nhưng có thông báo không mount được thư mục /home, sau đó thì tôi cũng không đăng nhập được
Tình trạng này xảy ra khi thư mục /home của bạn đặt ở phân vùng khác và do phân vùng đó được đánh số lại nên nó không mount được.
Để xử lý lỗi này, bạn bấm Ctrl+Alt+F1 rồi đăng nhập ở chế độ dòng lệnh. Sau đó gõ lệnh sau để sửa file /etc/fstab:
Code:
Tìm đến dòng định nghĩa mount cho thư mục /home và sửa lại cho đúng.
Sau đó mount lại thư mục /home:
Code:
Bấm Ctrl+Alt+F7 rồi đăng nhập bình thường.
Chúc vui vẻ.
-sh