Pada mesin "klien", cara aman untuk bergerak /tmp
adalah melakukan boot ulang. Di sini, oleh klien, maksud saya apa pun yang menjalankan program yang memasukkan soket /tmp
, khususnya X server dan layar.
Yang baru /tmp
pasti harus memiliki izin yang tepat (1777), jika tidak, Anda tidak bisa berharap memiliki sistem yang berfungsi.
Sebab /tmp
, Anda tidak bisa menyalin file apa pun. Itu karena sebagian besar waktu, program yang meletakkan barang-barang di /tmp
membuka file. Jika Anda menyalin file, itu menyalin konten, tetapi program-program masih memiliki file lama terbuka. Anda mungkin dapat menjangkau mereka dengan debugger ( ptrace
), tetapi ini akan jauh lebih rumit daripada me-reboot, dan dengan banyak program semua yang Anda lakukan hanya akan membuatnya crash.
Jika Anda /tmp
penuh dan Anda ingin beralih ke yang baru secara langsung, Anda harus memulai kembali semua program yang memiliki file terbuka di sana. Karena itu berarti memulai kembali X dan sesi layar, itu tidak jauh lebih baik daripada me-reboot.
Anda harus bisa beralih ke program baru tetapi tetap membuka file yang ada dengan menggunakan union union . (Prinsipnya bagus, tapi saya belum pernah mencoba, jadi mungkin ada masalah yang tidak terduga.) Berikut adalah cara untuk melakukan ini di Linux.
- Simpan semua file yang ada
/tmp
kecuali beberapa file besar yang dipilih secara manual.
- Buat
/tmp.new
(mode 1777).
- Paparan
/tmp
pada jalan yang berbeda: mount --bind / /.root.only
. Ini perlu karena langkah selanjutnya akan membayangi /tmp
. Mungkin ada implementasi union union yang berbeda yang tidak memerlukan langkah ini.
- Buat union mount dari
/.root.only/tmp
dan /tmp.new
, dipasang di /tmp
. Dengan cara ini file baru yang dibuat /tmp
akan ditulis /tmp.new
, tetapi file dalam /.root.only/tmp
juga terlihat di bawah /tmp
. Salah satu kemungkinan adalah
unionfs-sekering : unionfs-fuse /tmp.new:/.root.only/tmp /tmp
.
Jika Anda tidak ingin pergi ke root mount union (mis. Karena itu tidak tersedia di platform Anda, atau karena terlalu banyak masalah), setidaknya jangan hapus direktori lama. Pindahkan , sehingga program yang sedang berjalan akan tetap menggunakan direktori lama dan program baru akan menggunakan yang baru. (Tentu saja program baru tidak akan dapat berkomunikasi dengan program lama melalui soket atau pipa masuk /tmp
kecuali jika Anda mengatur TMPDIR
atau memberitahu mereka di mana mencarinya.)
mv /tmp /tmp.old && mkdir /tmp
/etc/fstab
/tmp
berada di tempat lain selain dari sistem file root, daftarkan/etc/fstab
, seperti halnya sistem file lain yang ingin Anda pasang pada saat boot. Jika bukan itu yang Anda tanyakan, Anda harus mengajukan pertanyaan baru dengan konteks yang cukup.