EC2'ye / tmp in / mnt nasıl monte edilir?


10

Bir EC2 örneğinde /tmpgeçici depolama alanına bitiş noktasını monte etmenin /mntve ubuntukullanıcıya varsayılan yazma izinlerini vermenin en iyi yolunun ne olduğunu merak ediyordum .

Bazıları /etc/rc.local dosyasını şu şekilde düzenlemenizi önerir:

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

Ancak bu benim için çalışmıyor (dosyalar farklı).

Varsayılan fstab girdisini düzenlemeyi denedim:

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

/ mnt yerine / tmp yazın ve ona bir umask = 0777 verin, ancak cloudconfig nedeniyle çalışmaz.

Ubuntu 12.04 kullanıyorum. Teşekkürler.


Benden ne yapmamı istediğini anlayamıyorum. Kullandığınız beklenen çıkışı bir örnek verebilir touchve ls -l?
Jeff Ferland

Örneğin: içindeki dosyaları listelemek /mnt/tmpaynı dosyaları döndürmeli ve kullanıcıdan yayınlanan /tmpbir dosyanın kullanmadan çalışması gerektiğini de eklemelidir . touch /tmp/testfileubuntusudo
Claudio Poli

Yanıtlar:


13

Listelediğiniz ilk öneri ile ilgili birkaç sorun var, ancak iyi bir yöne gidiyor gibi görünüyor:

  1. Güvenlik nedeniyle mkdirkomut, yapışkan bitin modda ayarlandığı dizini oluşturmalıdır:

    mkdir -m 1777 /mnt/tmp
    
  2. Bu -o nobootwaitkaydedilmediği için gerekli görünmüyor /mnt/fstab.

Yani, bunu denemenizi tavsiye ederim /etc/rc.local:

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

Bağlamayı bağlama girişimi /etc/fstab, örneği durdurduğunuzda / başlattığınızda veya bir AMI oluşturduğunuzda ve / mnt yeni bir örnek çalıştırdığınızda geçici depolama alanı olduğundan ve tüm içerik ( /mnt/tmpdizin dahil ) kaybolacağı için sorunlara yol açacaktır. .


Bunu kullanıcı-veri komut dosyalarına koymanızı tavsiye edebilir misiniz?
Claudio Poli

1
İlk önce geçici cihazın bir montajını denemek için rc.local kodlama yaklaşımını alırdım (zaten / mnt'de mi monte etti?) Ve bu başarısız olursa, biçimlendirin ve tekrar takmayı deneyin. Bu şekilde bir durdurma ve yeniden başlatma onu korumalıdır (sonlandırma her zamanki gibi yeni başlamanın yolu olacaktır). Ben rc.local monte beri / etc / fstab içinde kesin bir ihtiyaç görmüyorum, ama rc.local eklemek muhtemelen zarar vermez.
Skaperen

1
@ClaudioPoli: Bunu kullanıcı verilerine yerleştirmeyle ilgili sorun, kullanıcı-veri komut dosyasının yalnızca ilk önyüklemede çalıştırılmasıdır . Bunun her önyüklemede çalışmasını istiyorsunuz . Kullanıcı verilerinin bunu /etc/rc.local dosyasına eklemesini sağlayabilirsiniz, ancak bu dosyadaki herhangi bir "çıkış" ifadesinden önce eklendiğinden emin olun.
Eric Hammond

1
@Skaperen: / mnt genellikle temiz bir şekilde biçimlendirilir ve örneğin her çalıştırılmasında veya başlangıcında monte edilir. Bir durdurma / başlatma, önceki çalıştırmadan veri kalmadan temiz, taze / mnt verir. / Etc / fstab üzerinde yapmak istediğiniz herhangi bir değişiklik, durdurma / başlatma ile korunur, bu nedenle her önyüklemede rc.local'ın değiştirilmesi mantıklı olmaz.
Eric Hammond

13

Ubuntu'yu çalıştırdığınız için daha sağlam bir yaklaşım, Eric Hammond'un önerisini bir Upstart betiğinin içine koymak ve bağlamadan hemen sonra bağlamayı yapmak olacaktır /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 / Passenger gibi bazı sunucular üzerinde önemli geçici dosyalar oluşturabilir /tmp. Bir kez rc.local- önyükleme sırasındaki son - koştu gizlenir ve sunucuları karıştırır.


İlginç fikir ..
Tom O'Connor

1

Romulo Ceccon'un önerdiği gibi bir Upstart betiği kullanma fikri harika. Ancak, sihri belirsiz bir senaryoda gizlemek istemeyebilirsiniz. Montajı fstab içine eklemek mükemmel, örn.

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

Ve bu Upstart betiği:

# 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

Bu şekilde, herhangi bir dizin yapısı ve geçici depolamada olmayanlar oluşturabilirsiniz.

Geri kalan tek şey mkdir -p /mnt/local{1..4}ve bir yeniden başlatma (orada mevcut dosyaları gizlemek gibi olmadan / tmp mount olmazdı).


Fstab üzerinden bağlama başarılı olursa başarılı olur /mnt/local1mu? Belki de montaj olayı daha güvenlidir.
Rômulo Ceccon

Evet, / mnt / local1'in kullanılabilir olduğunu varsaydım. Hiçbir şey / mnt monte tipik olarak durum böyle açıkladı. Bu dizini oluşturmak kurulumun bir parçasıdır. Montaj etkinliğini kullanmayı denemedim, ama belki haklısın. Cevabımın asıl noktası, bağları fstab dosyasında tutmak ve uptart komut dosyalarında chmod 1777veya mkir -p uptart komut dosyalarında gibi şeyler yapmak daha iyi olabilir .
sfussenegger
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.