ทำไม / var / run ถูกย้ายไปที่ / run?


66

จากภาพรวมทางเทคนิคของ Ubuntu 11.10 Oneiric :

Ubuntu 11.10 ได้อพยพออกไปจาก/var/run, /var/lockและ/dev/shmและตอนนี้ใช้/run, /run/lockและ/run/shmแทน (ตามลำดับ)

  • ฉันฮาร์ดโค้ดพา ธ เหล่านี้ในแอปพลิเคชันของฉันทำไมการเปลี่ยนแปลงนี้ถึง Oneiric
  • ฉันจะทำอย่างไรเพื่อทำให้แอปพลิเคชันของฉันถอยหลังและรองรับการทำงานไปข้างหน้า? มีวิธีที่ดีกว่าที่อื่น ๆ นอกเหนือจากการตรวจสอบครั้งแรกสำหรับการดำรงอยู่ของ/runแล้ว/var/run?

คำตอบ:


58

จุดประสงค์คือการลดจำนวนtmpfsระบบไฟล์ เมื่อวันที่ 11.04 มีแยกต่างหากtmpfsระบบไฟล์ที่/var/lock, และ/var/run /dev/shmหากไดเรกทอรีเหล่านี้อยู่ภายใต้ไดเรกทอรีหลักเดียวดังนั้นtmpfsจะต้องมีเพียงไดเรกทอรีเดียว นอกจากนี้ยังมีตำแหน่งที่ชัดเจนสำหรับข้อมูลสถานะรันไทม์เพิ่มเติมที่ไม่ควรคงอยู่กับการรีบูต

หากแอปพลิเคชันของคุณขึ้นอยู่กับเส้นทางไฟล์ที่ยอมรับได้แอปพลิเคชันของคุณควรรันโดยไม่มีการดัดแปลงเนื่องจากตำแหน่งเก่าจะเชื่อมโยงกับตำแหน่งใหม่ นโยบาย AppArmor เป็นกรณีหนึ่งที่ขึ้นอยู่กับชื่อพา ธ จริงซึ่งเป็นสาเหตุที่มีการกล่าวถึงโดยเฉพาะ

ลิงก์ต่อไปนี้ควรช่วยอธิบายเหตุผล:


36
  1. /run เป็นตำแหน่ง tmpfs cross-distribution ใหม่สำหรับการจัดเก็บไฟล์สถานะชั่วคราว - นั่นคือไฟล์ที่มีข้อมูลรันไทม์ที่อาจหรือไม่จำเป็นต้องถูกเขียนในช่วงเริ่มต้นของกระบวนการบูต

    การทำให้/runไดเรกทอรีพร้อมใช้งานนั้นนำเราเข้าใกล้จุดที่เป็นไปได้ที่จะใช้ระบบตามปกติด้วยการติดตั้งระบบไฟล์รูทแบบอ่านอย่างเดียวโดยไม่ต้องใช้วิธีแก้ไขใด ๆ เช่นการaufs/unionfsซ้อนทับ

    /run แทนที่ตำแหน่งที่มีอยู่หลายแห่งที่อธิบายไว้ในมาตรฐานระบบแฟ้มลำดับชั้น:

    • /var/run/run
    • /var/lock/run/lock
    • /dev/shm/run/shm[ขณะนี้ Debian มีแผนที่จะทำเช่นนี้เท่านั้น]
    • /tmp/run/tmp[ตัวเลือก; ปัจจุบันเดเบียนมีแผนเสนอเท่านั้น]
    • /run ยังแทนที่ตำแหน่งอื่น ๆ ที่ถูกใช้สำหรับไฟล์ชั่วคราว:

    • /lib/init/rw/run

    • /dev/.*/run/*
    • /dev/shm/*/run/*
    • ไฟล์ที่เขียนได้ภายใต้/etc/run/*

    (ดังนั้นคุณอาจคาดหวังว่าสิ่งเหล่านี้จะย้ายเช่นกัน)

    ที่มา: เป้าหมายการเผยแพร่เดเบียน

  2. ฉันจะแนะนำเกี่ยวกับการสร้างส่วนหนึ่งในซอฟต์แวร์ของคุณที่คุณตั้งค่าไดเรกทอรีเหล่านี้ในตัวแปรเปลี่ยนรหัสของคุณเพื่อใช้ตัวแปรเหล่านี้แล้วเปลี่ยนตัวแปรตามระบบที่ใช้ใน (แต่ฉันเดิมพันคุณรู้แล้ว)


1
/etcคุณหมายถึงไฟล์ที่สามารถเขียนสิ่งที่อยู่ภายใต้ สิ่งเหล่านั้นต้องคงอยู่ในการรีบูตในอดีตใช่ไหม นั่นเป็นเพียงไฟล์ conf ทั่วไป
Evan Carroll

6
อ้อเข้าใจแล้ว. สามไฟล์ภายใต้/etc, และเร็ว ๆ นี้/etc/lvm/cache/ /etc/mtab /etc/network/run/ifstate /etc/adjtimeฉันคิดว่ามันไม่ดีสำหรับพวกเขาที่จะ/etcเริ่มต้นด้วย
Evan Carroll

5

จากสิ่งที่ฉันได้อ่านนี่เป็นคำอธิบายดั้งเดิมที่อธิบายว่าทำไม / จึงถูกนำมาใช้ http://lwn.net/Articles/436012/


8
ในขณะที่สิ่งนี้อาจตอบคำถามในทางทฤษฎีมันก็ควรที่จะรวมส่วนสำคัญของคำตอบที่นี่และให้ลิงค์สำหรับการอ้างอิง
Stefano Palazzo

3

หมายเหตุ: ตั้งแต่ / เริ่มต้นทำงานการกำหนดค่าขนาดเล็กอาจมีปัญหา เซิร์ฟเวอร์ Ubuntu ของฉันคือ 256Mo RAM และ / run เป็นค่าเริ่มต้นที่ตั้งไว้ที่ 49Mo
เมื่อเริ่มต้นระบบจะเติมระบบไฟล์จนเต็ม
การเปลี่ยนแปลงใน fstab ไม่สามารถใช้เพื่อเพิ่มขนาดของ tempfs / run ไม่พบวิธีการอื่นที่ฉันพบใน gg
ฉันพบโซลูชันเพื่อเพิ่มสคริปต์ เริ่มต้น: /etc/rc.localบรรทัดที่ mount -t tmpfs tmpfs /run -o remount,size=85Mจะขยายเมื่อเริ่มต้น (85M สำหรับความเชื่อมั่นของฉัน)


2

คุณไม่ควรฮาร์ดโค้ดของ/runเส้นทางเหล่านี้!

  • ใช้/var/runเนื่องจาก symlink จะถูกใช้แทน/runหากมี
  • /var/lock เป็นเช่นเดียวกับข้างต้น
  • อย่า hardcode /dev/shmเคยใช้shm_openฯลฯเสมอ(posix API)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.