Pada mesin "klien", cara aman untuk bergerak /tmpadalah 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 /tmppasti 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 /tmpmembuka 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 /tmppenuh 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
/tmpkecuali beberapa file besar yang dipilih secara manual.
- Buat
/tmp.new(mode 1777).
- Paparan
/tmppada 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/tmpdan /tmp.new, dipasang di /tmp. Dengan cara ini file baru yang dibuat /tmpakan ditulis /tmp.new, tetapi file dalam /.root.only/tmpjuga 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 /tmpkecuali jika Anda mengatur TMPDIRatau memberitahu mereka di mana mencarinya.)
mv /tmp /tmp.old && mkdir /tmp