Bagaimana cara me-mount / tmp di / mnt di EC2?

10

Saya bertanya-tanya apa cara terbaik untuk memasang /tmptitik akhir dalam penyimpanan sementara /mntpada contoh EC2 dan memberikan ubuntuizin menulis default kepada pengguna.

Beberapa menyarankan untuk mengedit /etc/rc.local dengan cara ini:

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

Namun itu tidak berfungsi untuk saya (file berbeda).

Saya mencoba mengedit entri fstab default:

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

mengganti / mnt dengan / tmp dan dan memberinya umask = 0777, namun tidak berfungsi karena cloudconfig.

Saya menggunakan Ubuntu 12.04. Terima kasih.

Claudio Poli
sumber
Saya tidak tahu apa yang Anda minta saya lakukan. Bisakah Anda memberikan contoh output yang diharapkan menggunakan touchdan ls -l?
Jeff Ferland
Sebagai contoh: daftar file dalam /mnt/tmpharus mengembalikan file yang sama /tmp, menambahkan bahwa yang touch /tmp/testfiledikeluarkan dari ubuntupengguna harus bekerja tanpa menggunakan sudo.
Claudio Poli

Jawaban:

13

Ada beberapa masalah dengan saran awal yang Anda daftarkan, meskipun sepertinya mengarah ke arah yang baik:

  1. Untuk tujuan keamanan, mkdirperintah harus membuat direktori dengan bit lengket yang diatur dalam mode:

    mkdir -m 1777 /mnt/tmp
    
  2. The -o nobootwaittampaknya tidak diperlukan karena ini tidak disimpan di /mnt/fstab.

Jadi, saya sarankan mencoba ini di /etc/rc.local:

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

Setiap upaya untuk memasang bind mount /etc/fstabakan mengalami masalah ketika Anda menghentikan / memulai instance atau ketika Anda membuat AMI dan menjalankan instance baru karena / mnt adalah penyimpanan sementara dan semua konten (termasuk /mnt/tmpdirektori) akan menghilang .

Eric Hammond
sumber
Bisakah Anda merekomendasikan menempatkan ini dalam skrip data pengguna?
Claudio Poli
1
Saya akan mengambil pendekatan pengkodean rc.local untuk pertama kali mencoba mount perangkat ephemeral (apakah dia sudah me-mount di / mnt?), Dan jika itu gagal, format dan coba pasang lagi. Dengan cara itu berhenti dan mulai ulang harus melestarikannya (mengakhiri akan menjadi cara untuk memulai yang baru, seperti biasa). Saya tidak melihat kebutuhan yang pasti untuk memilikinya di / etc / fstab sejak rc.local me-mount-nya, tetapi memiliki rc.local menambahkannya mungkin tidak akan sakit.
Skaperen
1
@ClaudioPoli: Masalah dengan menempatkan ini dalam data pengguna adalah bahwa skrip data pengguna hanya dijalankan pada boot pertama . Anda ingin ini dijalankan pada setiap boot. Anda bisa meminta data pengguna menambahkan ini ke /etc/rc.local, tetapi pastikan itu dimasukkan sebelum pernyataan "keluar" di file itu.
Eric Hammond
1
@ Skaperen: / mnt pada umumnya diformat dengan bersih dan dipasang pada setiap menjalankan atau memulai sebuah instance. Berhenti / mulai memberi Anda bersih, segar / mnt tanpa data tersisa dari berjalan sebelumnya. Setiap modifikasi yang ingin Anda buat ke / etc / fstab akan dipertahankan melalui stop / start, jadi tidak masuk akal untuk memiliki rc.local memodifikasinya di setiap boot.
Eric Hammond
13

Pendekatan yang lebih kuat, karena Anda menjalankan Ubuntu, adalah dengan memasukkan saran Eric Hammond di dalam skrip pemula , dan lakukan pengikatan segera setelah pemasangan /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

Beberapa server, seperti Apache / Penumpang, mungkin membuat file sementara penting /tmp. Sekali rc.local- yang terakhir dalam urutan boot - berlari mereka akan disembunyikan dan membingungkan server.

Rômulo Ceccon
sumber
Ide yang menarik ..
Tom O'Connor
1

Gagasan menggunakan skrip pemula seperti yang disarankan oleh Romulo Ceccon sangat bagus. Namun, Anda mungkin tidak ingin menyembunyikan keajaiban di dalam skrip yang tidak jelas. Tidak apa-apa untuk menambahkan mount di dalam fstab, mis

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

Dan ini skrip pemula:

# 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

Dengan cara ini, Anda dapat membuat struktur direktori apa saja dan apa yang tidak pada penyimpanan sementara.

Yang tersisa hanyalah mkdir -p /mnt/local{1..4}restart (saya tidak akan me-mount / tmp tanpa Anda akan menyembunyikan file saat ini di sana).

sfussenegger
sumber
Akankah mount via fstab berhasil jika tidak ada /mnt/local1? Mungkin acara pemasangan lebih aman.
Rômulo Ceccon
Ya, saya berasumsi bahwa / mnt / local1 tersedia. Saya seharusnya menjelaskan, bahwa tidak ada yang terpasang pada / mnt yang biasanya terjadi. Karena itu, membuat direktori ini adalah bagian dari pengaturan. Saya belum mencoba menggunakan acara pemasangan, tetapi mungkin Anda benar. Poin utama dari jawaban saya adalah bahwa mungkin lebih baik menyimpan mount di file fstab dan melakukan hal-hal seperti chmod 1777atau mkir -p dalam skrip pemula.
sfussenegger