Có rủi ro khi đổi tên thư mục với 180GB bằng mv
lệnh không?
Chúng tôi có một thư mục /data
chứa 180GB.
Chúng tôi muốn đổi tên /data
thư mục /BD_FILES
thành mv
lệnh.
Có an toàn để làm điều đó?
Có rủi ro khi đổi tên thư mục với 180GB bằng mv
lệnh không?
Chúng tôi có một thư mục /data
chứa 180GB.
Chúng tôi muốn đổi tên /data
thư mục /BD_FILES
thành mv
lệnh.
Có an toàn để làm điều đó?
Câu trả lời:
Thay đổi tên trên một thư mục là an toàn, nếu nó nằm trong cùng một hệ thống tệp.
Nếu đó là một điểm gắn kết (có /data
vẻ như nó có thể là một điểm gắn kết với tôi, hãy kiểm tra điều này với mount
), thì bạn cần phải làm một cái gì đó ngoài việc đơn giản mv
vì mv /data /BD_FILES
sẽ di chuyển dữ liệu đến phân vùng gốc (có thể không phải là cái gì bạn muốn xảy ra)
Bạn nên ngắt kết nối hệ thống tệp, đổi tên thư mục hiện trống, cập nhật /etc/fstab
vị trí mới cho hệ thống tệp này và sau đó kết nối lại hệ thống tệp tại vị trí được đổi tên.
Nói cách khác,
umount /data
mv /data /BD_FILES
(giả sử /BD_FILES
không tồn tại, trong trường hợp đó, hãy di chuyển nó ra khỏi đường đi trước)/etc/fstab
, thay đổi điểm gắn kết từ /data
đến/BD_FILES
mount /BD_FILES
Điều này không liên quan đến việc sao chép bất kỳ tệp nào xung quanh, nó chỉ thay đổi tên của thư mục đóng vai trò là điểm gắn kết cho hệ thống tệp.
Nếu việc đổi tên thư mục liên quan đến việc di chuyển nó sang một hệ thống tệp mới (ví dụ như trường hợp /data
nằm trên một đĩa trong khi /BD_FILES
ở trên một đĩa khác, chẳng hạn, một việc thường làm nếu bạn chuyển mọi thứ sang phân vùng lớn hơn chẳng hạn) , Tôi khuyên bạn nên sao chép dữ liệu trong khi giữ nguyên bản gốc cho đến khi bạn có thể kiểm tra xem bản sao đó có ổn không. Bạn có thể làm điều này với
rsync -a /data/ /BD_FILES/
ví dụ, nhưng xem rsync
hướng dẫn để biết những gì nó làm và không làm (ví dụ: nó không bảo tồn các liên kết cứng).
Khi thư mục được đổi tên, bạn cũng cần đảm bảo rằng các quy trình hiện có (chương trình và người dùng sử dụng thư mục, bản sao lưu, v.v.) biết về việc thay đổi tên.
mv
chỉ thực hiện một rename
cuộc gọi hệ thống, nhưng do hoàn cảnh người ta không nhận ra rằng nó sẽ sao chép các tệp và xóa bản gốc. Nếu tôi cần tuyệt đối chắc chắn chỉ cần một rename
cuộc gọi hệ thống được thực hiện và mv
sẽ không làm điều gì đó "thông minh" sau lưng tôi, tôi mở một vỏ Python và sử dụng os.rename
.
mkdir /BD_FILES && mount -M /data /BD_FILES && rmdir /data
rsync
là nó có thể khởi động lại.
rsync -a
bảo tồn hầu hết tất cả các siêu dữ liệu, nhưng không phải liên kết cứng, ACL hoặc thuộc tính mở rộng (thêm -HAX
vào đó).
rename
lệnh khác nhau với hành vi khác nhau. Tôi nghĩ đó là lý do đủ để không sử dụng rename
lệnh khi bạn muốn chắc chắn những gì nó sẽ làm.
Nếu bạn chỉ đổi tên (nguồn và đích trong cùng một hệ thống tệp), thì đó chỉ đơn giản là đổi tên của một mục nhập thư mục. Nó thành công và thư mục có tên mới hoặc không thành công trong trường hợp không có gì thay đổi * .
Nếu nguồn và đích nằm trên các hệ thống tệp khác nhau, dữ liệu cần được sao chép theo mv
. Sự khác biệt về tính năng hệ thống tệp, chẳng hạn như kích thước tệp tối đa, giới hạn về tên tệp, v.v., có thể gây ra sự cố. Để tránh vấn đề này, sao chép tập tin đầu tiên ( cp
, rsync
, ...) và sau khi sao chép hoàn tất thành công, loại bỏ các tập tin trong vị trí ban đầu.
* Tuy nhiên, có một số trường hợp góc, ví dụ được đề cập trong phần BUGS trong đổi tên người đàn ông 2
Như những người khác đã nói, việc đổi tên một thư mục không gây ra rủi ro cố hữu cho nội dung. Nhưng có một loại rủi ro khác nhau mà bạn có thể muốn xem xét.
Các quy trình, tập lệnh, phím tắt do người dùng xác định và cấu hình tham chiếu vị trí ban đầu có thể bị phá vỡ bởi thay đổi này và ví dụ: nếu các đường dẫn được lưu trữ trong cơ sở dữ liệu, thì việc cập nhật chúng có thể là một công việc lớn.
Một điều bạn có thể làm là tạo một liên kết tượng trưng cho tên thư mục mới, nhưng để lại tên cũ trong một thời gian. Điều đó sẽ cho bạn thời gian để đánh giá tác động của sự thay đổi này. Bạn có thể tạm thời xóa tên cũ, xem có vấn đề gì không và nếu có, chỉ cần tạo lại tên cũ để mọi người có thể tiếp tục làm việc trong khi bạn tìm ra những gì cần được cập nhật.
Một lệnh như thế này sẽ làm điều đó:
ln -s /data /BD_FILES
mv thing1 thing2 ; ln --symbolic ./thing2 thing1
. Bằng cách đó, tôi đã có tên mới và có thể dễ dàng kiểm tra sự vắng mặt của cái cũ bằng cách xóa liên kết tượng trưng.
Đổi tên là nguyên tử. Rủi ro hợp lý duy nhất là mv
quyết định sao chép mọi thứ vì một số lý do và sự cố xảy ra nửa chừng. Nếu bạn có GNU mv
, mv -T
sẽ loại bỏ rủi ro này.
mv -T
nói mv
rằng nó đang di chuyển đến một thư mục không; Điều này sẽ khiến nó từ chối thực hiện mkdir()
, điều này sẽ khiến nó bị lỗi nếu di chuyển một thư mục và nó đã quyết định sao chép vì một số lý do.
Tôi đã tham gia vào việc xua đuổi bọ xít mv -T
trong khi làm luận án thạc sĩ nhiều năm trước. Nó được sử dụng để làm điều sai trên quá nhiều trường hợp cạnh.
Mặt khác, bạn có 180GB dữ liệu người dùng trên phân vùng gốc. Bạn có thể muốn di chuyển cái này ra khỏi phân vùng gốc.
mv
với-i
tùy chọn.