Mengapa / var / run dimigrasikan ke / run?

66

Dari tinjauan teknis Ubuntu 11.10 Oneiric :

Ubuntu 11.10 telah bermigrasi jauh dari /var/run, /var/lockdan /dev/shmdan sekarang menggunakan /run, /run/lockdan /run/shmbukan (masing-masing).

  • Saya membuat hardcode jalur ini di aplikasi saya, mengapa perubahan ini dibuat untuk Oneiric?
  • Apa yang bisa saya lakukan untuk membuat aplikasi saya kompatibel mundur dan maju? Apakah ada cara yang lebih baik selain memeriksa dulu keberadaannya /run, lalu /var/run?
Lekensteyn
sumber

Jawaban:

58

Tujuannya adalah untuk mengurangi jumlah tmpfssistem file. Pada 11,04, ada tmpfssistem file terpisah di /var/lock, /var/rundan /dev/shm. Jika semua direktori ini berada di bawah direktori induk tunggal, maka hanya satu yang tmpfsdiperlukan. Ini juga menyediakan lokasi yang jelas untuk data status runtime lebih lanjut yang tidak boleh bertahan selama reboot.

Kecuali jika aplikasi Anda bergantung pada jalur kanonik file, aplikasi Anda harus berjalan tanpa modifikasi karena lokasi lama akan disinkronkan dengan yang baru. Kebijakan AppArmor adalah satu kasus yang tidak bergantung pada nama jalur asli, itulah sebabnya mengapa disebutkan secara khusus.

Tautan berikut akan membantu menjelaskan alasannya:

James Henstridge
sumber
36
  1. /run adalah lokasi tmpfs lintas-distribusi baru untuk penyimpanan file status sementara — yaitu file yang berisi informasi run-time yang mungkin atau mungkin tidak perlu ditulis pada awal proses boot dan yang tidak perlu disimpan di seluruh reboot.

    Membuat /rundirektori tersedia membawa kita selangkah lebih dekat ke titik di mana dimungkinkan untuk menggunakan sistem secara normal dengan sistem file root yang dipasang hanya-baca, tanpa memerlukan solusi yang kikuk seperti aufs/unionfsoverlay.

    /run menggantikan beberapa lokasi yang ada yang dijelaskan dalam Standar Hierarki Filesystem:

    • /var/run/run
    • /var/lock/run/lock
    • /dev/shm/run/shm[saat ini hanya Debian yang berencana untuk melakukan ini]
    • /tmp/run/tmp[opsional; saat ini hanya Debian yang berencana menawarkan ini]
    • /run juga mengganti beberapa lokasi lain yang telah digunakan untuk file sementara:

    • /lib/init/rw/run

    • /dev/.*/run/*
    • /dev/shm/*/run/*
    • file yang dapat ditulis di bawah /etc/run/*

    (jadi Anda mungkin bisa berharap ini juga bergerak).

    Sumber: tujuan rilis debian

  2. Saya akan menyarankan untuk membuat bagian dalam perangkat lunak Anda di mana Anda mengatur direktori ini dalam variabel, mengubah kode Anda untuk menggunakan variabel-variabel ini dan kemudian mengubah variabel berdasarkan sistem yang digunakan (tapi saya yakin Anda sudah tahu itu).

Rinzwind
sumber
1
Apa maksud Anda file yang dapat ditulis di bawah /etc. Itu semua harus bertahan setelah reboot, kan? Itu hanya file conf generik.
Evan Carroll
6
Oh begitu. Tiga file di bawah /etc, /etc/lvm/cache/ /etc/mtab /etc/network/run/ifstatedan segera /etc/adjtime. Saya kira itu buruk bagi mereka /etcuntuk memulai.
Evan Carroll
5

Dari apa yang saya baca, ini adalah penjelasan asli yang diberikan mengapa / run diperkenalkan. http://lwn.net/Articles/436012/

gotunandan
sumber
8
Sementara ini secara teoritis dapat menjawab pertanyaan, akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
Stefano Palazzo
3

Catatan: sejak / menjalankan pengantar, konfigurasi kecil mungkin mendapat masalah. Server Ubuntu saya adalah 256Mo RAM dan / run secara default diatur ke 49Mo.
Saat startup, ia mengisi sistem file hingga penuh.
Membuat perubahan pada fstab tidak beroperasi untuk meningkatkan tempfs / run size. Tidak ada prosedur lain yang saya temukan di gg.
Saya menemukan solusi untuk menambahkan skrip init: /etc/rc.localbaris mount -t tmpfs tmpfs /run -o remount,size=85M untuk diperluas saat startup. (85M adalah untuk conf saya.)

korriden
sumber
2

Anda seharusnya tidak membuat hardcode salah satu dari /runjalur ini !

  • Gunakan /var/run, karena symlink akan /runberlaku jika berlaku
  • /var/lock sama seperti di atas
  • Jangan /dev/shmpernah hardcode , selalu gunakan shm_opendll (posix API)
ramslök
sumber