วิธีการ mount / tmp ใน / mnt บน EC2?


10

ฉันสงสัยว่าอะไรคือวิธีที่ดีที่สุดในการติดตั้ง/tmpจุดปลายในที่เก็บชั่วคราว/mntในอินสแตนซ์ EC2 และให้ubuntuสิทธิ์การเขียนเริ่มต้นแก่ผู้ใช้

บางคนแนะนำให้แก้ไข /etc/rc.local ด้วยวิธีนี้:

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

อย่างไรก็ตามมันไม่ได้ผลสำหรับฉัน (ไฟล์ต่างกัน)

ฉันพยายามแก้ไขรายการ fstab เริ่มต้น:

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

แทนที่ / mnt ด้วย / tmp และให้ umask = 0777 แต่มันไม่ทำงานเพราะ cloudconfig

ฉันใช้ Ubuntu 12.04 ขอบคุณ


ฉันไม่สามารถหาสิ่งที่คุณขอให้ฉันทำ คุณสามารถให้ตัวอย่างของผลลัพธ์ที่คาดไว้โดยใช้touchและls -l?
Jeff Ferland

ตัวอย่างเช่น: รายชื่อไฟล์ใน/mnt/tmpควรกลับไฟล์เดียวกันใน/tmpเพิ่มว่าtouch /tmp/testfileออกจากผู้ใช้ควรจะทำงานโดยไม่ต้องใช้ubuntu sudo
Claudio Poli

คำตอบ:


13

มีปัญหาสองสามข้อกับรายการแนะนำเริ่มต้นที่คุณระบุแม้ว่าดูเหมือนว่าจะเป็นไปในทิศทางที่ดี:

  1. เพื่อจุดประสงค์ด้านความปลอดภัยmkdirคำสั่งควรสร้างไดเรกทอรีด้วยชุดบิตเหนียวในโหมด:

    mkdir -m 1777 /mnt/tmp
    
  2. ดูเหมือนจะไม่จำเป็นเช่นนี้ไม่ได้ถูกบันทึกไว้ใน-o nobootwait/mnt/fstab

ดังนั้นฉันขอแนะนำให้ลองทำใน/etc/rc.local:

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

ความพยายามใด ๆ ที่จะนำการผูกเข้า/etc/fstabจะทำให้เกิดปัญหาเมื่อคุณหยุด / เริ่มต้นอินสแตนซ์หรือเมื่อคุณสร้าง AMI และเรียกใช้อินสแตนซ์ใหม่เนื่องจาก / mnt เป็นที่เก็บชั่วคราวและเนื้อหาทั้งหมด (รวมถึง/mnt/tmpไดเรกทอรี) จะหายไป .


คุณสามารถแนะนำให้วางลงในสคริปต์ข้อมูลผู้ใช้หรือไม่
Claudio Poli

1
ฉันจะใช้วิธีการเข้ารหัส rc.local ก่อนอื่นให้ลองเมานท์อุปกรณ์ชั่วคราว (แล้วเขาเมานต์ที่ / mnt หรือไม่) และถ้ามันล้มเหลวให้ฟอร์แมตแล้วลองติดตั้งอีกครั้ง ด้วยวิธีนี้การหยุดและเริ่มใหม่ควรรักษาไว้ (ยุติจะเป็นวิธีเริ่มต้นใหม่ตามปกติ) ฉันไม่เห็นความต้องการที่ชัดเจนใน / etc / fstab ตั้งแต่ rc.local ติดตั้ง แต่การมี rc.local ต่อท้ายอาจไม่เจ็บ
Skaperen

1
@ClaudioPoli: ปัญหาในการใส่ข้อมูลผู้ใช้นี้คือสคริปต์ข้อมูลผู้ใช้จะทำงานในการบูตครั้งแรกเท่านั้น คุณต้องการให้มันทำงานทุกครั้งที่บู๊ต คุณสามารถเพิ่มข้อมูลผู้ใช้ลงใน /etc/rc.local ได้ แต่ต้องแน่ใจว่ามันถูกแทรกก่อนคำสั่ง "exit" ในไฟล์นั้น
Eric Hammond

1
@Skaperen: / mnt มีการจัดรูปแบบโดยทั่วไปและติดตั้งในทุกการเรียกใช้หรือเริ่มต้นอินสแตนซ์ การหยุด / เริ่มช่วยให้คุณสะอาดใหม่ / mnt โดยไม่มีข้อมูลเหลือจากการทำงานก่อนหน้า การปรับเปลี่ยนใด ๆ ที่คุณต้องการจะทำกับ / etc / fstab จะถูกรักษาไว้ด้วยการหยุด / เริ่มดังนั้นจึงไม่มีเหตุผลที่จะให้ rc.local แก้ไขมันในทุก ๆ การบู๊ต
Eric Hammond

13

วิธีที่มีประสิทธิภาพมากขึ้นเนื่องจากคุณใช้งาน Ubuntu จะเป็นการแนะนำของ Eric Hammondไว้ในสคริปต์Upstartและทำให้การเชื่อมโยงเสร็จสิ้นทันทีหลังจากติดตั้ง /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

บางเซิร์ฟเวอร์เช่น Apache / /tmpผู้โดยสารอาจสร้างไฟล์ชั่วคราวที่สำคัญเกี่ยวกับ ครั้งหนึ่งrc.local- ลำดับสุดท้ายในการบู๊ต - รันพวกเขาจะถูกซ่อนและทำให้เซิร์ฟเวอร์สับสน


ความคิดที่น่าสนใจ ..
Tom O'Connor

1

แนวคิดของการใช้สคริปต์ Upstart ตามที่ Romulo Ceccon แนะนำไว้นั้นยอดเยี่ยม อย่างไรก็ตามคุณอาจไม่ต้องการซ่อนเวทย์มนตร์ภายในสคริปต์ที่ไม่ชัดเจน มันโอเคที่จะเพิ่มเมานต์ใน fstab อย่างสมบูรณ์

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

และนี่คือสคริปต์พุ่งพรวด:

# 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

ด้วยวิธีนี้คุณสามารถสร้างโครงสร้างไดเรกทอรีและสิ่งที่ไม่ได้อยู่ในที่จัดเก็บข้อมูลชั่วคราว

สิ่งที่เหลืออยู่คือmkdir -p /mnt/local{1..4}การรีสตาร์ท (ฉันจะไม่เมานต์ / tmp โดยที่คุณไม่ต้องซ่อนไฟล์ปัจจุบันที่นั่น)


การเมานต์ผ่าน fstab จะสำเร็จ/mnt/local1หรือไม่หากไม่มี บางทีเหตุการณ์การติดตั้งอาจปลอดภัยกว่า
Rômulo Ceccon

ใช่ฉันคิดว่า / mnt / local1 พร้อมใช้งาน ฉันควรจะอธิบายว่าไม่มีอะไรติดตั้งอยู่บน / mnt ซึ่งโดยทั่วไปแล้วเป็นกรณี การสร้างไดเรกทอรีนี้จึงเป็นส่วนหนึ่งของการตั้งค่า ฉันยังไม่ได้ลองใช้เหตุการณ์การเมานต์ แต่บางทีคุณอาจถูก จุดสำคัญของคำตอบของฉันคือมันอาจจะดีกว่าที่จะเก็บเมานท์ในไฟล์ fstab และทำสิ่งต่าง ๆ เช่นchmod 1777หรือmkir -p ในสคริปต์ upstart
sfussenegger
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.