วิธีการตั้งค่าอุปกรณ์ลูปในเวลาบูต?


14

ฉันต้องการตั้งค่าอุปกรณ์ลูปในเวลาบูต ฉันสงสัยว่าอะไรคือวิธีที่ดีที่สุดในการทำสิ่งนี้

ฉันค้นหาด้วยกูเกิ้ลแล้ว บางคนบอกว่าการเพิ่มกฎ udev บางคนบอกว่าใส่สคริปต์ใน/etc/init.dบางคนก็ปรับเปลี่ยน initramfs

ดังนั้นวิธีที่ดีที่สุดหรือถูกต้องคืออะไร คุณกรุณาให้รายละเอียด (เกี่ยวกับวิธีการ)

ขอขอบคุณ.


ฉันจะไปกับ/etc/init.d/somethingหรือ/etc/rc.localแต่ฉันแนะนำให้อยู่กับวิธีการใด ๆ ที่ได้ผล
enzotib

6
เพื่ออะไร? หากคุณต้องการให้ไฟล์ถูกเมานต์ในเวลาบูทเพียงเพิ่มลงใน / etc / fstab ด้วยตัวเลือกการวนซ้ำและการเมานต์จะดูแลการกำหนดค่าอุปกรณ์ลูปแบ็คสำหรับคุณ
psusi

@psusi: ขอบคุณสำหรับคำแนะนำของคุณ แต่สำหรับจุดประสงค์ของฉันการติดตั้งไม่เพียงพอและในความเป็นจริงแล้วไฟล์ไม่สามารถติดตั้งได้ มันเป็นดิสก์อิมเมจแทนอิมเมจพาร์ติชัน และฉันจำเป็นต้องรู้ชื่อที่แน่นอนของอุปกรณ์ลูปเพื่อใช้ในการสร้างดิสก์เสมือนใน VirtualBox (ฉันจะทำให้ชนิดของการคิดดิสก์เสมือนนี้มันเป็นเรื่องง่ายที่จะแชร์ไฟล์ระหว่างเครื่องเสมือนและเครื่องโฮสต์ในตัวโฟลเดอร์ที่ใช้ร่วมไม่ทำงานสำหรับการใช้งานบางอย่าง..)
roun

4
คุณสามารถชี้เครื่องเสมือนไปยังไฟล์แทนอุปกรณ์ลูปแบ็ค คุณต้องระมัดระวังเป็นอย่างยิ่งเพื่อให้แน่ใจว่าคุณไม่เคยเรียกใช้เครื่องเสมือน (หรือถูกระงับ) และติดตั้งระบบไฟล์บนโฮสต์ในเวลาเดียวกันหรือคุณจะเสีย fs ด้วยเหตุนี้จึงเป็นความคิดที่ดีกว่ามากในการใช้เครือข่ายเพื่อให้แขกเข้าถึงไฟล์ที่โฮสต์แชร์ผ่าน nfs หรือ samba หรือ sshfs
psusi

@Roun: พาร์ติชั่นในไฟล์ยังสามารถติดตั้งได้แม้ว่าคุณจะต้องระบุเซกเตอร์ออฟเซ็ตของพาร์ติชั่นตั้งแต่ต้นไฟล์ (เช่นmount /disk.img /mnt -o loop,offset=2048สำหรับพาร์ติชั่นแรก) ออฟเซ็ตสามารถพบได้โดยใช้ชิ้นส่วนหรือ fdisk เมื่อมีการตั้งค่าอุปกรณ์วนรอบ (ดูคำตอบของฉันด้านล่าง)
zanfur

คำตอบ:


7

มีวิธี "เหมาะสม" อย่างน้อยสามวิธีในการเริ่มต้นสิ่งต่าง ๆ ใน Ubuntu (สมมติว่าคุณไม่เพียง แต่ต้องการติดตั้ง) ซึ่งแสดงไว้ที่นี่เพื่อลดลำดับการตั้งค่า:

  1. /etc/init/*.conf (พุ่งพรวด)
  2. /etc/init.d/* (sysvinit)
  3. /etc/rc.local (สคริปต์เปลี่ยนแปลง runlevel)

นอกจากนี้ยังมีความเป็นไปได้ของการใช้กฎ udev แต่จะมีความซับซ้อน ฉันแนะนำต่อมัน สคริปต์ sysvinit นั้นเกินความจำเป็นดังนั้นฉันจะมุ่งเน้นไปที่ตัวเลือกอื่น ๆ สองตัว สคริปต์การเปลี่ยนแปลง runlevel นั้นง่ายที่สุด (แต่ต้องการน้อยที่สุด) ดังนั้นฉันจะเริ่มต้นที่นั่น

/etc/rc.localไฟล์จะถูกดำเนินการเพียงโดย/etc/init.d/rc.localสคริปต์ sysvinit ซึ่งเป็น (โดยค่าเริ่มต้น) การดำเนินการที่ผ่านมาเมื่อมีการเปลี่ยนไปใช้ใด ๆ ปกติ "กับ" ระดับการทำงาน (เช่นเมื่อคุณบูตได้ตามปกติ แต่ไม่ได้เมื่อคุณปิดตัวลงหรือไปที่โหมดการกู้คืน) ในการติดตั้งอุปกรณ์สำหรับบูตให้เพิ่มสิ่งนี้ในตอนท้าย/etc/rc.localโดยสมมติว่าไฟล์ของคุณถูกเรียกใช้/srv/diskimageและคุณต้องการใช้/dev/loop0เป็นอุปกรณ์ลูป:

losetup /dev/loop0 /srv/diskimage

นั่นคือทั้งหมดที่มีให้มัน แน่นอนแทนที่ชื่อไฟล์ด้วยสิ่งที่ดีที่สุดในการตั้งค่าของคุณ

หากคุณต้องการให้มีความเฉพาะเจาะจงมากขึ้นคุณสามารถสร้างงาน Upstart สำหรับงานที่ตั้งขึ้นเมื่อระบบไฟล์ที่ถืออยู่ถูกเมาท์ ตัวอย่างจะเป็นดังต่อไปนี้สมมติว่า/srvเป็นจุดเมานท์ที่มีdiskimageไฟล์ของคุณ:

description     "Setup loop devices after filesystems are mounted"

start on mounted MOUNTPOINT=/srv
task
exec losetup /dev/loop0 /srv/diskimage

สิ่งนี้ควรจะง่ายพอที่จะทำตามแนวคิด: บรรทัดแรกเป็นเพียงความคิดเห็นสำหรับผู้อ่านของมนุษย์และเป็นคำแนะนำสำหรับการพุ่งพรวดเพื่อรอจนกว่า/srvระบบไฟล์จะถูกติดตั้งดำเนินการกระบวนการ losetup และพิจารณาตัวเองว่าเสร็จสิ้นเมื่อกระบวนการออกเรียบร้อยแล้ว ภารกิจ "ซึ่งตรงข้ามกับบริการที่ยังคงอยู่) /etc/init/*.confเนื้อหาเพียงแค่ใส่ผู้ที่อยู่ในการจับคู่ไฟล์ ฉันจะเลือก/etc/init/losetup.confเอง

ข้อดีของงานพุ่งพรวดใน/etc/rc.localเรื่องง่าย ๆ นั้นเล็ก แต่สำคัญ อย่างแรก/etc/rc.localคือเลิกใช้แล้วและการใช้งานเป็นเพียงแค่ "กล่องทรายที่ยุ่งเหยิงเพื่อทำสิ่งต่าง ๆ " จะถูกทำให้ขมวดคิ้วโดยทุกคนในทุกวันนี้ ด้วยเหตุผลอื่น ๆ สำหรับการขมวดคิ้วเมื่อมีการใช้งานบางโปรแกรมที่ใช้ไฟล์นั้นจะเขียนทับเนื้อหาและมันก็ยากที่จะปรับความแตกต่างของสคริปต์ต่าง ๆ ที่จำเป็นต้องใช้ในไฟล์เดียวกัน ประการที่สองพุ่งพรวดจริงจัดการการพึ่งพาการตรวจสอบสำหรับคุณ (การทำให้แน่ใจว่าระบบแฟ้มติดตั้งครั้งแรก) ดังนั้นหากมีปัญหาการติดตั้งระบบแฟ้มมันจะไม่ลองตั้งค่าอุปกรณ์ลูป .... แต่จะเมื่อคุณแก้ไขและติดตั้งแล้ว ประการที่สามการพุ่งพรวดมีความยืดหยุ่นอย่างมากมายเช่นคุณสามารถฉลาดพอที่จะหาอุปกรณ์ลูปที่ไม่ได้ใช้งานและ "ปล่อย" อุปกรณ์ลูปนั้นเพื่อใช้ในงานพุ่งพรวดอื่น ๆ เช่นเดียวกับที่เราใช้ตัวแปร "MOUNTPOINT" ในตัวอย่างนี้ด้านบน


วิธี /etc/init/losetup.conf เรียกใช้อย่างไร มันใช้งานไม่ได้สำหรับฉัน ...
Imran

1

ตามที่ @psusi ชี้ให้เห็นวิธีที่ง่ายที่สุดคือการเพิ่มบรรทัดต่อไปนี้ลงใน/etc/fstabไฟล์ของคุณ

/path/to/loop/device       /path/to/mount/point       auto       loop       0 0

ตอนนี้รีบูตหรือรันmount -aในฐานะรูท จากนั้นควรติดตั้งอุปกรณ์ lsblkคุณสามารถตรวจสอบว่ามีการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.