วิธีการ (อย่างปลอดภัย) ย้าย / tmp ไปยังไดรฟ์ข้อมูลอื่น


17

วันนี้/tmpไดเรกทอรีเต็มไปด้วยเครื่องที่ทำงาน ปัญหาคือมันอยู่ในพาร์ติชันรูทซึ่งไม่ใหญ่มาก เพื่อที่จะแก้ไขปัญหานี้ให้เพื่อนร่วมงานสร้าง/new/tmpไดเรกทอรีอื่นคัดลอกเนื้อหาทั้งหมดไปยังไดเรกทอรีใหม่ออกเดิมและทำให้ลิงก์สัญลักษณ์/tmp/tmp -> /new/tmp

เมื่อเขาคัดลอกไฟล์ (จริงๆนี้เป็นคนอื่นที่ไม่ใช่ฉัน) เขาไม่ได้ใช้-aเพื่อให้เจ้าของไฟล์ภายใต้ทุกคนเป็น/new/tmp rootนอกจากนี้เขาไม่ได้ตั้งค่าการอนุญาตของ/new/tmpไดเรกทอรีดังนั้นจึงเป็นค่าเริ่มต้น 0755 สิ่งนี้ทำให้ไม่มีปัญหาและแม้กระทั่งโหมดการปรับแต่งและบิตความเป็นเจ้าของล้มเหลวในการกู้คืนเครื่องกลับสู่สถานะการทำงานที่ยอมรับได้ ฉันต้องลงมือทำทุกอย่างใน/tmpและรีบูต

/tmpไดเรกทอรีที่มีซ็อกเก็ตต่างๆและท่อและ whatnot ตั้งแต่พวงของคนทำงาน Gnome ผ่าน VNC และฉันจะใช้screenซึ่งมีท่อของตัวเอง

มีวิธีที่ปลอดภัยในการย้าย/tmpไดเรกทอรีไปยังไดรฟ์ข้อมูลอื่นบนระบบที่รันอยู่หรือไม่? ฉันไม่แน่ใจว่าฉันจะทำอะไรเพื่อให้ทุกอย่างทำงานได้จริง ฉันสงสัยเป็นพิเศษเกี่ยวกับสิ่งที่เกิดขึ้นกับท่อและซ็อกเก็ต

คำตอบ:


20

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

ใหม่/tmpต้องมีสิทธิ์ที่ถูกต้อง (1777) มิฉะนั้นคุณจะไม่สามารถหวังได้ว่าจะมีระบบการทำงาน

สำหรับ/tmpคุณสวยมากไม่สามารถคัดลอกไฟล์ใด ๆ นั่นเป็นเพราะส่วนใหญ่โปรแกรมที่วางสิ่งต่าง ๆ ในการ/tmpเปิดไฟล์ หากคุณคัดลอกไฟล์นั่นเป็นการคัดลอกเนื้อหา แต่โปรแกรมยังคงเปิดไฟล์เก่าอยู่ คุณอาจสามารถเข้าถึงพวกเขาด้วยดีบักเกอร์ ( ptrace) แต่สิ่งนี้จะซับซ้อนกว่าการรีบู๊ตและมีหลายโปรแกรมที่คุณต้องทำ

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

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

  1. เก็บไฟล์ที่มีอยู่ทั้งหมด/tmpยกเว้นไฟล์ใหญ่ที่เลือกด้วยตนเอง
  2. สร้าง/tmp.new(โหมด 1777)
  3. เปิดเผย/tmpในเส้นทางอื่น: mount --bind / /.root.only. /tmpนี้เป็นสิ่งจำเป็นเพราะขั้นตอนต่อไปจะเงา อาจมีการติดตั้งสหภาพที่แตกต่างกันซึ่งไม่ต้องการขั้นตอนนี้
  4. ทำให้สหภาพภูเขา/.root.only/tmpและติดตั้งอยู่บน/tmp.new /tmpวิธีไฟล์ใหม่นี้ถูกสร้างขึ้น/tmpจะถูกเขียนใน/tmp.newแต่ไฟล์ในยังอยู่ภายใต้การมองเห็น/.root.only/tmp /tmpความเป็นไปได้หนึ่งคือ unionfs ฟิวส์unionfs-fuse /tmp.new:/.root.only/tmp /tmp :

หากคุณไม่ต้องการไปที่ root mount mount (เช่นเพราะมันไม่สามารถใช้ได้บนแพลตฟอร์มของคุณหรือเพราะมันเป็นปัญหามากเกินไป) อย่างน้อยอย่าลบไดเรกทอรีเก่า ย้ายไปดังนั้นโปรแกรมที่รันอยู่จะยังคงใช้งานไดเรกทอรีเดิมอยู่และโปรแกรมใหม่จะใช้ไดเรกทอรีใหม่ (แน่นอนว่าโปรแกรมใหม่จะไม่สามารถสื่อสารกับโปรแกรมเก่าผ่านซ็อกเก็ตหรือไปป์ได้/tmpเว้นแต่ว่าคุณจะตั้งค่าTMPDIRหรือบอกตำแหน่งที่จะมอง)

mv /tmp /tmp.old && mkdir /tmp

คุณจะช่วยอธิบายวิธีทำให้ตำแหน่งใหม่ของ / tmp คงอยู่ตลอดการรีบูตหรือไม่?
FoxDeploy

@FoxDeploy ใส่รายการไว้ใน/etc/fstab
Gilles 'SO- หยุดความชั่วร้าย'

คุณสามารถอธิบายรายละเอียดเกี่ยวกับเรื่องนี้ได้ไหม?
FoxDeploy

@FoxDeploy ฉันไม่แน่ใจว่าสิ่งที่คุณถามที่นี่ หากคุณต้องการ/tmpอยู่ที่อื่นนอกเหนือจากระบบไฟล์รูทให้ใส่รายการดัง/etc/fstabกล่าวเช่นเดียวกับระบบไฟล์อื่น ๆ ที่คุณต้องการติดตั้งในเวลาบูต หากนั่นไม่ใช่สิ่งที่คุณถามคุณควรถามคำถามใหม่ที่มีบริบทเพียงพอ
Gilles 'หยุดความชั่วร้าย'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.