Làm cách nào để gắn kết / tmp trong / mnt trên EC2?


10

Tôi đã tự hỏi đâu là cách tốt nhất để gắn /tmpđiểm cuối vào bộ lưu trữ phù du /mnttrên một phiên bản EC2 và cung cấp cho ubuntungười dùng quyền ghi mặc định.

Một số đề xuất chỉnh sửa /etc/rc.local theo cách này:

mkdir -p /mnt/tmp && mount --bind -o nobootwait /mnt/tmp /tmp

Tuy nhiên, điều đó không làm việc cho tôi (các tập tin khác nhau).

Tôi đã thử chỉnh sửa mục nhập fstab mặc định:

/dev/xvdb /mnt auto defaults,nobootwait,comment=cloudconfig 0 2

thay thế / mnt bằng / tmp và cung cấp cho nó một umask = 0777, tuy nhiên nó không hoạt động vì cloudconfig.

Tôi đang sử dụng Ubuntu 12.04. Cảm ơn.


Tôi không thể hiểu bạn đang yêu cầu tôi làm gì. Bạn có thể cung cấp một ví dụ về đầu ra dự kiến ​​bằng cách sử dụng touchls -l?
Jeff Ferland

Ví dụ: liệt kê các tệp trong /mnt/tmpsẽ trả lại cùng một tệp /tmp, thêm rằng một tệp được touch /tmp/testfilephát từ ubuntungười dùng sẽ hoạt động mà không cần sử dụng sudo.
Claudio Poli

Câu trả lời:


13

Có một vài vấn đề với đề xuất ban đầu mà bạn liệt kê, mặc dù có vẻ như nó đang đi theo một hướng tốt:

  1. Vì mục đích bảo mật, mkdirlệnh sẽ tạo thư mục với bit dính được đặt trong chế độ:

    mkdir -m 1777 /mnt/tmp
    
  2. Điều -o nobootwaitnày dường như không cần thiết vì điều này không được lưu vào /mnt/fstab.

Vì vậy, tôi khuyên bạn nên thử điều này trong /etc/rc.local:

test -d /mnt/tmp || mkdir -m 1777 /mnt/tmp
mount --bind /mnt/tmp /tmp

Bất kỳ nỗ lực nào để gắn kết gắn kết /etc/fstabsẽ gặp sự cố khi bạn dừng / khởi động thể hiện hoặc khi bạn tạo AMI và chạy một phiên bản mới vì / mnt là lưu trữ phù du và tất cả nội dung (bao gồm cả /mnt/tmpthư mục) sẽ biến mất .


Bạn có thể đề nghị đưa cái này vào tập lệnh dữ liệu người dùng không?
Claudio Poli

1
Tôi sẽ sử dụng phương pháp mã hóa RC.local để thử đầu tiên một thiết bị phù du (anh ta đã lắp nó ở / mnt chưa?), Và nếu thất bại, hãy định dạng lại và thử gắn lại. Bằng cách đó, dừng và khởi động lại sẽ bảo toàn nó (chấm dứt sẽ là cách để bắt đầu mới, như thường lệ). Tôi không thấy một nhu cầu nhất định phải có nó trong / etc / fstab kể từ khi RC.local gắn nó, nhưng có thêm RC.local thì có lẽ nó sẽ không bị tổn thương.
Skaperen

1
@ClaudioPoli: Vấn đề với việc đưa dữ liệu này vào dữ liệu người dùng là tập lệnh dữ liệu người dùng chỉ được chạy trong lần khởi động đầu tiên . Bạn muốn điều này chạy trên mỗi khởi động. Bạn có thể có dữ liệu người dùng thêm phần này vào /etc/rc.local, nhưng hãy đảm bảo rằng nó được chèn trước bất kỳ câu lệnh "exit" nào trong tệp đó.
Eric Hammond

1
@Skaperen: / mnt thường được định dạng rõ ràng và được gắn vào mỗi lần chạy hoặc bắt đầu một thể hiện. Dừng / bắt đầu cung cấp cho bạn một sạch, tươi / mnt không có dữ liệu còn lại từ lần chạy trước. Bất kỳ sửa đổi nào bạn muốn thực hiện thành / etc / fstab sẽ được lưu giữ thông qua stop / start, do đó, sẽ không có ý nghĩa gì khi RC.local sửa đổi nó trên mỗi lần khởi động.
Eric Hammond

13

Một cách tiếp cận mạnh mẽ hơn, vì bạn đang chạy Ubuntu, sẽ đưa đề xuất của Eric Hammond vào trong tập lệnh Khởi động và thực hiện liên kết ngay sau khi cài đặt /mnt :

# File /etc/init/mounted-mnt.conf

# mounted-mnt - Binds /tmp to /mnt/tmp

description     "Binds /tmp to /mnt/tmp"

start on mounted MOUNTPOINT=/mnt

task

script
    test -d /mnt/tmp || mkdir -m 1777 /mnt/tmp
    mount --bind /mnt/tmp /tmp
end script

Một số máy chủ, như Apache / Hành khách, có thể tạo các tệp tạm thời quan trọng trên /tmp. Một lần rc.local- lần cuối cùng trong chuỗi khởi động - chạy, chúng sẽ bị ẩn và gây nhầm lẫn cho các máy chủ.


Ý tưởng hấp dẫn ..
Tom O'Connor

1

Ý tưởng sử dụng một kịch bản Upstart theo đề xuất của Romulo Ceccon là tuyệt vời. Tuy nhiên, bạn có thể không muốn che giấu phép thuật bên trong một kịch bản tối nghĩa. Hoàn toàn ổn khi thêm mount bên trong fstab, vd

LABEL=cloudimg-rootfs   /    ext4   defaults    0 0

# auto mount ephemeral storage (if any)
# init contents in /etc/init/mounted-local*.conf
/dev/xvdb  /mnt/local1  auto  defaults,nofail,nobootwait,comment=cloudconfig  0 2
/dev/xvdc  /mnt/local2  auto  defaults,nofail,nobootwait,comment=cloudconfig  0 2
/dev/xvdd  /mnt/local3  auto  defaults,nofail,nobootwait,comment=cloudconfig  0 2
/dev/xvde  /mnt/local4  auto  defaults,nofail,nobootwait,comment=cloudconfig  0 2

# bind /tmp to /mnt/local1, might still be on / if no ephemeral storage
/mnt/local1  /tmp  none  bind

Và đây là kịch bản Upstart:

# File /etc/init/mounted-local1.conf

# mounted-local1 - init ephemeral storage in /mnt/local1

description     "Initializes ephemeral storage in /mnt/local1"

start on mounted MOUNTPOINT=/mnt/local1

# provide defult, see /etc/init/mounted-tmp.conf for details
env MOUNTPOINT=/mnt/local1

task

script
    # fix permissions if needed
    test -d $MOUNTPOINT && chmod 1777 $MOUNTPOINT

    # log to /var/log/upstart/mounted-local1.log
    #echo "initialized $MOUNTPOINT"

end script

Bằng cách này, bạn có thể tạo bất kỳ cấu trúc thư mục nào và những gì không có trên bộ lưu trữ phù du.

Tất cả những gì còn lại là mkdir -p /mnt/local{1..4}và khởi động lại (Tôi sẽ không gắn kết / tmp nếu không bạn sẽ ẩn các tệp hiện tại ở đó).


Gắn kết qua fstab sẽ thành công nếu không có /mnt/local1? Có lẽ sự kiện gắn kết là an toàn hơn.
Rômulo Ceccon

Có, tôi giả sử rằng / mnt / local1 có sẵn. Tôi nên giải thích rằng không có gì được gắn trên / mnt mà thường là trường hợp. Tạo thư mục này do đó là một phần của thiết lập. Tôi chưa thử sử dụng sự kiện gắn kết, nhưng có lẽ bạn đã đúng. Điểm chính của câu trả lời của tôi là có thể tốt hơn để giữ gắn kết trong tệp fstab và làm những thứ như chmod 1777hoặc mkir -p trong các tập lệnh khởi động.
sfussalanger
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.