Bagaimana cara (aman) memindahkan / tmp ke volume yang berbeda?

17

Hari ini /tmpdirektori diisi pada mesin di tempat kerja. Masalahnya adalah, itu pada partisi root yang tidak terlalu besar. Untuk memperbaikinya, rekan kerja membuat /new/tmpdirektori di tempat lain, menyalin semua konten ke direktori baru, menghapus yang asli /tmpdan membuat symlink /tmp -> /new/tmp.

Ketika ia menyalin file (benar-benar, ini adalah orang lain, bukan aku!) Dia tidak menggunakan -asehingga pemilik setiap file di bawah /new/tmpitu root. Selain itu, ia tidak mengatur izin /new/tmpdirektori jadi itu adalah 0755 default. Ini menyebabkan tidak ada akhir masalah dan bahkan mode tweaker dan bit kepemilikan gagal mengembalikan mesin ke kondisi kerja yang dapat diterima. Saya akhirnya harus nuke semuanya /tmpdan reboot.

The /tmpdirektori berisi berbagai soket dan pipa dan yang lainnya, karena sekelompok orang menjalankan Gnome melalui VNC, dan saya menggunakan screenyang memiliki pipa sendiri.

Apakah ada cara aman untuk memindahkan /tmpdirektori ke volume berbeda di sistem yang sedang berjalan? Saya tidak yakin apa yang sebenarnya akan saya lakukan untuk membuat semuanya berfungsi. Saya sangat ingin tahu tentang apa yang terjadi pada pipa dan soket.

Greg Hewgill
sumber

Jawaban:

20

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.

  1. Simpan semua file yang ada /tmpkecuali beberapa file besar yang dipilih secara manual.
  2. Buat /tmp.new(mode 1777).
  3. 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.
  4. 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
Gilles 'SANGAT berhenti menjadi jahat'
sumber
Maukah Anda mengklarifikasi bagaimana membuat lokasi baru / tmp bertahan melalui reboot?
FoxDeploy
@FoxDeploy Masukkan entri untuk itu/etc/fstab
Gilles 'SO- stop being evil'
Bisakah Anda menguraikan hal itu?
FoxDeploy
@FoxDeploy Saya tidak yakin apa yang Anda minta di sini. Jika Anda ingin /tmpberada 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.
Gilles 'SANGAT berhenti menjadi jahat'