Làm thế nào để di chuyển / usr đến một phân vùng mới?


26

/usrThư 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:


27

Sẽ an toàn nhất khi sử dụng Live CD, nhưng bạn có thể làm:

  • sao chép tất cả các tệp vào một phân vùng mới, đảm bảo rằng nội dung của /usrkhông thay đổi trong khi bạn đang làm điều này.
  • chỉnh sửa /etc/fstabđể /usrsẽ được gắn vào lần khởi động lại tiếp theo
  • khởi động lại
  • xóa các tập tin cũ

Xem 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 /usrtrong khi chạy vì sẽ có rất nhiều tệp trong /usrđó sẽ được mở.

Sao chép tập tin

Tôi sẽ sử dụng cp -a. -alà 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

Chỉnh sửa / etc / fstab

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 ext4thà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.

Xóa các tập tin cũ

Sau khi khởi động lại, các tệp cũ trong /usrphâ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.


4
rsyncrất phù hợp với điều này hơncp
Marco Ceppi

1
@MarcoCeppi Bạn có thể mở rộng về điều đó? Có thể đưa ra một câu trả lời biến thể sử dụng rsyncthay thế?
Kazark

6
Thay thế lệnh cp bằng 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.
Marco Ceppi

2
KHÔNG sử dụng 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/usr/bin/psedlà cùng một tập tin. Di chuyển với cpsẽ tạo ra 2 phiên bản độc lập của tập tin đó. Làm rsync -aHthay thế.
oᴉɹǝɥɔ

1
Trước hết, bỏ qua cờ -z - nó cho phép nén, điều này khiến bạn không gửi các tệp qua mạng là vô ích (ngoại trừ rsync thường đủ thông minh để bỏ qua nó, nhưng vẫn có thể bỏ qua nó) . @ AleksandarStefanović bạn chắc chắn muốn có nội dung ở đó, không phải thư mục và lý do nó xảy ra theo cách đó là do một số yêu cầu rsync: nó xử lý rsync -avH a/ bkhá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.
Darael

7

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.


2

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):

  1. 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 
    
  2. Tại thời điểm này, tôi nhận ra rằng nó đã sao chép mọi thứ vào /usrthư 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 đó.

  3. 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
    
  4. 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 /usrphâ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.

  5. Khởi động lại hệ thống

  6. Sau khi khởi động lại, hãy mở System Monitor hoặc ứng dụng tương tự để xem liệu /usrphâ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.

  7. Sau khi kiểm tra xem mọi thứ đã ổn, bạn có thể xóa /usrphâ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.


Tại sao trả lời một câu hỏi 5 tuổi nếu nó đã có câu trả lời được chấp nhận và bạn không biết bạn đang nói về cái gì?
cmks

2
@cmks vì tôi cảm thấy như các câu trả lời khác chưa đầy đủ - Tôi không nhận được giải pháp hoàn chỉnh từ một câu trả lời và không có câu trả lời nào không có đủ chi tiết cho chúng. Tôi cảm thấy như những người dùng đến với câu hỏi này sẽ cần sự giúp đỡ. Sẽ không có vấn đề gì nếu nó năm tuổi nếu ai đó vẫn cần thông tin từ câu hỏi này.
Aleksandar Stefanović

1
Tại sao mọi người khởi động lại hệ thống của họ? Không nên sudo mount -acho phép nó tiếp tục chạy?
Hagen von Eitzen

@ Hagen Tôi đoán đó chỉ là một biện pháp tốt
Aleksandar Stefanović
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.