/usr
Thư mục của tôi cần được chuyển đến một phân vùng mới. Làm thế nào tôi có thể làm điều này mà không xóa nội dung?
Điều này có thể được thực hiện trong khi Ubuntu đang chạy hay tôi cần sử dụng LiveCD cho việc này?
/usr
Thư mục của tôi cần được chuyển đến một phân vùng mới. Làm thế nào tôi có thể làm điều này mà không xóa nội dung?
Điều này có thể được thực hiện trong khi Ubuntu đang chạy hay tôi cần sử dụng LiveCD cho việc này?
Câu trả lời:
Sẽ an toàn nhất khi sử dụng Live CD, nhưng bạn có thể làm:
/usr
không thay đổi trong khi bạn đang làm điều này./etc/fstab
để /usr
sẽ được gắn vào lần khởi động lại tiếp theoXem bên dưới để biết chi tiết về từng bước.
Lưu ý rằng bạn không thể gắn kết phân vùng mới /usr
trong khi chạy vì sẽ có rất nhiều tệp trong /usr
đó sẽ được mở.
Tôi sẽ sử dụng cp -a
. -a
là tùy chọn lưu trữ. Từ trang người đàn ông :
-a, --archive
same as -dR --preserve=all
...
-d same as --no-dereference --preserve=links
...
-P, --no-dereference
never follow symbolic links in SOURCE
...
--preserve[=ATTR_LIST]
preserve the specified attributes (default:
mode,ownership,timestamps), if possible additional attributes:
context, links, xattr, all
...
-R, -r, --recursive
copy directories recursively
Bạn cần biết UUID của phân vùng mới của bạn. Bạn có thể xem ánh xạ bằng cách thực hiện:
$ ls -l /dev/disk/by-uuid/
Và sau đó thêm dòng này vào /etc/fstab
:
UUID=634c31a5-e27c-4e33-ac67-2e22491a30c2 /usr ext4 defaults 0 2
Thay đổi UUID thành UUID của bạn và thay đổi ext4
thành loại hệ thống tệp bạn đang sử dụng - bạn nên biết điều này nếu bạn đã thiết lập phân vùng.
Sau khi khởi động lại, các tệp cũ trong /usr
phân vùng gốc sẽ bị ẩn bởi phân vùng mới được gắn vào /usr
. Nhưng chúng ta có thể sử dụng một số thủ thuật liên kết gắn kết để đến các tệp cũ và sau đó xóa chúng.
$ sudo mount --bind / /mnt
$ sudo rm -rf /mnt/usr/*
$ sudo umount /mnt
Nhưng một số sai lầm nhỏ (giả sử, nhấn Enter khi bạn chỉ gõ sudo rm -rf /mnt
) có thể gây ra thảm họa, vì vậy tôi sẽ chỉ sử dụng phương pháp này nếu bạn rất tự tin vào những gì bạn đang làm, thực sự không thể đối phó với bất kỳ thời gian chết nào hoặc không có truy cập vật lý vào máy và do đó không thể khởi động CD hoặc thẻ USB trực tiếp.
rsync
thay thế?
rsync -avz
. Rsync cho phép bạn khởi động lại các bản sao và thường được sử dụng khi di chuyển giữa các phân vùng, khối thiết bị hoặc máy.
cp
. Nó không bảo tồn LIÊN KẾT CỨNG. Điều này sẽ phá vỡ gói nâng cấp trong tương lai. Ví dụ /usr/bin/s2p
và /usr/bin/psed
là cùng một tập tin. Di chuyển với cp
sẽ tạo ra 2 phiên bản độc lập của tập tin đó. Làm rsync -aH
thay thế.
rsync -avH a/ b
khác với rsync -avH a b
, sao chép nội dung của thư mục a
(nghĩa là a/*
) trong trường hợp đầu tiên và chính thư mục trong lần thứ hai Hãy chắc chắn rằng bạn sử dụng dấu gạch chéo ở đây.
Vì hầu hết các thư viện được sử dụng là trong / usr, tôi không khuyên bạn nên di chuyển thư mục này trong khi chạy Ubuntu. Trong thực tế, bạn có thể nhận được thông báo lỗi khi bạn cố gắng làm điều này. Do đó, tốt nhất là sử dụng LiveCD.
Bạn có thể sử dụng một số khả năng để di chuyển / sao chép các tập tin cp, rsync, v.v. bạn muốn đảm bảo rằng bất kỳ liên kết tượng trưng nào được tạo và không chỉ sao chép. cp và rsync đều có tùy chọn cho việc này.
Sau khi di chuyển các tệp sang phân vùng khác, bạn cần thêm một mount khác trong / etc / fstab để gắn phân vùng mới vào / usr.
Chú ý: Tôi không biết tôi đang làm gì, tôi chỉ sao chép các lệnh và thực hiện theo đề xuất của người khác. Đây có thể là cách không chính xác để làm điều đó, nhưng nó hiệu quả với tôi (ít nhất là bây giờ).
Đây là cách tôi đã thực hiện (theo câu trả lời của Hamish và các bình luận):
Sao chép tất cả các tệp mà phân vùng vừa tạo (thay thế bằng vị trí của phân vùng của bạn, nó sẽ trông giống như của tôi):
rsync -avz /usr /media/aleksandar/750b84e2-e65f-4309-ade5-5af0033a937c
Tại thời điểm này, tôi nhận ra rằng nó đã sao chép mọi thứ vào /usr
thư mục trên phân vùng, nó sẽ không hoạt động , vì vậy tôi đã sao chép mọi thứ (với trình quản lý tệp) từ thư mục đó vào thư mục gốc của phân vùng và đã xóa nó thư mục sau đó.
Chỉnh sửa /etc/fstab
(giống như trong câu trả lời của Hamish, tất nhiên, thay thế bằng UUID của bạn)
UUID=634c31a5-e27c-4e33-ac67-2e22491a30c2 /usr ext4 defaults 0 2
Một bước hóa ra không phải là rất khôn ngoan: Tôi đã thay đổi tên của /usr
phân vùng hiện được gắn kết thành /usrBACKUP
, để tôi biết rằng, khi tôi khởi động lại hệ thống, thực tế nó khởi động lại vào phân vùng mới được tạo, chứ không phải là phân vùng cũ . Sau đó, mọi thứ rối tung trên màn hình và tôi phải tắt nguồn bằng cách nhấn phím nguồn (thiên tài như tôi) . Bỏ qua bước này nếu bạn không muốn trục trặc hệ thống của mình.
Khởi động lại hệ thống
Sau khi khởi động lại, hãy mở System Monitor hoặc ứng dụng tương tự để xem liệu /usr
phân vùng mới của bạn có được gắn hay không và kiểm tra an toàn xem mọi thứ có đúng như kế hoạch không.
Sau khi kiểm tra xem mọi thứ đã ổn, bạn có thể xóa /usr
phân vùng cũ của mình . Tôi sẽ giữ cho tôi chỉ trong trường hợp có điều gì đó không ổn.
sudo mount -a
cho phép nó tiếp tục chạy?
rsync
rất phù hợp với điều này hơncp