Làm thế nào để (an toàn) di chuyển / tmp đến một âm lượng khác?


17

Hôm nay /tmpthư mục đầy trên một máy tại nơi làm việc. Vấn đề là, nó nằm trên phân vùng gốc không lớn lắm. Để khắc phục điều này, một đồng nghiệp đã tạo một /new/tmpthư mục ở nơi khác, sao chép tất cả nội dung vào thư mục mới, xóa bản gốc /tmpvà tạo một liên kết tượng trưng /tmp -> /new/tmp.

Khi anh ta sao chép các tập tin (thực sự, đây là người khác, không phải tôi!) Anh ta đã không sử dụng -anên chủ sở hữu của mọi tập tin bên dưới /new/tmproot. Hơn nữa, anh ta đã không thiết lập các quyền của /new/tmpthư mục để nó là mặc định 0755. Điều này không gây ra sự cố và thậm chí điều chỉnh chế độ và bit sở hữu không thể khôi phục máy về trạng thái hoạt động chấp nhận được. Tôi cuối cùng đã phải nuke tất cả mọi thứ trong /tmpvà khởi động lại.

Thư mục /tmpchứa các ổ cắm và đường ống khác nhau và không có gì, vì một nhóm người chạy Gnome qua VNC, và tôi sử dụng screencó đường ống riêng.

Có cách nào an toàn để di chuyển một /tmpthư mục đến một ổ đĩa khác trên một hệ thống đang chạy không? Tôi không chắc những gì tôi đã thực sự làm để giữ cho mọi thứ hoạt động. Tôi đặc biệt tò mò về những gì xảy ra với đường ống và ổ cắm.

Câu trả lời:


20

Trên máy khách của Cameron, cách di chuyển an toàn /tmplà khởi động lại. Ở đây, theo khách hàng, tôi có nghĩa là bất cứ điều gì chạy các chương trình đặt ổ cắm /tmp, đặc biệt là máy chủ X và màn hình.

Mới /tmpchắc chắn cần phải có quyền (1777), nếu không bạn không thể có một hệ thống làm việc.

Đối với /tmp, bạn khá nhiều không thể sao chép bất kỳ tập tin. Đó là bởi vì hầu hết thời gian, các chương trình đưa công cụ vào /tmpmở các tệp. Nếu bạn sao chép tệp, nó sao chép nội dung, nhưng các chương trình vẫn mở các tệp cũ. Bạn có thể liên hệ với họ bằng trình gỡ lỗi ( ptrace), nhưng điều này sẽ phức tạp hơn nhiều so với khởi động lại và với nhiều chương trình, tất cả những gì bạn làm là làm hỏng chúng.

Nếu bạn đã /tmpđầy và bạn muốn chuyển sang một chương trình mới, bạn cần khởi động lại tất cả các chương trình có tệp được mở ở đó. Vì điều đó có nghĩa là khởi động lại phiên X và màn hình, không tốt hơn nhiều so với khởi động lại.

Bạn sẽ có thể chuyển đổi cho các chương trình mới nhưng giữ nguyên các tệp đang mở bằng cách sử dụng giá đỡ kết hợp . (Nguyên tắc là âm thanh, nhưng tôi chưa bao giờ thử, vì vậy có thể có những sự cố không mong muốn.) Đây là một cách để làm điều này trên Linux.

  1. Giữ tất cả các tệp hiện có /tmpngoại trừ một vài tệp lớn được chọn thủ công.
  2. Tạo một /tmp.new(chế độ 1777).
  3. Tiếp xúc /tmptrên một con đường khác nhau : mount --bind / /.root.only. Điều này là cần thiết bởi vì bước tiếp theo sẽ bóng /tmp. Có thể có các triển khai gắn kết khác nhau không yêu cầu bước này.
  4. Tạo một liên kết gắn kết /.root.only/tmp/tmp.new, gắn kết /tmp. Bằng cách này, các tệp mới được tạo /tmpsẽ được ghi vào /tmp.new, nhưng các tệp trong /.root.only/tmpcũng được hiển thị bên dưới /tmp. Một khả năng là unionfs-fuse : unionfs-fuse /tmp.new:/.root.only/tmp /tmp.

Nếu bạn không muốn truy cập root mount (ví dụ: vì nó không khả dụng trên nền tảng của bạn hoặc vì nó quá nhiều rắc rối), ít nhất đừng xóa thư mục cũ. Di chuyển nó, để các chương trình đang chạy sẽ tiếp tục sử dụng thư mục cũ và các chương trình mới sẽ sử dụng thư mục mới. (Tất nhiên các chương trình mới sẽ không thể giao tiếp với các chương trình cũ thông qua ổ cắm hoặc đường ống /tmptrừ khi bạn đặt TMPDIRhoặc nói cho họ biết nơi cần tìm.)

mv /tmp /tmp.old && mkdir /tmp

Bạn có phiền làm rõ cách làm cho vị trí mới của / tmp tồn tại thông qua khởi động lại không?
FoxDeploy

@FoxDeploy Đặt một mục cho nó vào/etc/fstab
Gilles 'SO- ngừng trở thành ác quỷ'

Bạn có thể giải thích về điều đó?
FoxDeploy

@FoxDeploy Tôi không chắc bạn đang hỏi gì ở đây. Nếu bạn muốn /tmpở một nơi khác ngoài hệ thống tập tin gốc, hãy liệt kê nó /etc/fstab, giống như bất kỳ hệ thống tập tin nào khác mà bạn muốn gắn vào lúc khởi động. Nếu đó không phải là những gì bạn đang hỏi, bạn nên hỏi một câu hỏi mới với đủ ngữ cảnh.
Gilles 'SO- ngừng trở nên xấu xa'
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.