Unionfs-ฟิวส์จะไม่ทำแผนที่ไดเรกทอรีไปยังตัวมันเอง


2

ดังนั้นฉันจึงพยายามรวมสองไดเรกทอรีเข้าด้วยกันและล้มเหลว นี่คือหลักฐานของสิ่งที่ฉันพยายามและจากแบบฝึกหัดและข้อมูลที่ฉันเห็นจาก googling ฉันแน่ใจว่ามันควรจะใช้ได้ ฉันเดา aufs2 เป็นที่ต้องการโดยทั่วไปและยังมี mddhfs แต่ฉันไม่สามารถหาเอกสารใด ๆ เกี่ยวกับหลังและเก่าไม่ได้อยู่ในที่เก็บ (เช่นฉันไม่ต้องการติดตั้ง build-Essentials ฯลฯ เพราะฉันต้องการติดตั้งพวกเขาจริง ๆ ในสหภาพไม่ใช่ในระบบไฟล์หลัก)

อย่างไรก็ตามฉันตั้งค่าสถานการณ์การทดสอบต่อไปนี้

user@host:~$ cd Desktop
user@host:~/Desktop$ mkdir test
user@host:~/Desktop$ cd test
user@host:~/Desktop/test$ mkdir test1
user@host:~/Desktop/test$ mkdir test2
user@host:~/Desktop/test$ mkdir test3
user@host:~/Desktop/test$ echo "this is file A" > test1/fileA.txt
user@host:~/Desktop/test$ echo "this is file B" > test2/fileB.txt

จากนั้นฉันจะรวมไดเรกทอรี test1 และ test2 เป็นเช่นนั้น

unionfs-fuse /home/user/Desktop/test/test1=RW:/home/user/Desktop/test/test2=RO /home/user/Desktop/test/test3

และฉันได้รับผลลัพธ์ที่คาดหวัง

user@host:~/Desktop/test$ unionfs-fuse /home/user/Desktop/test/test1=RW:/home/user/Desktop/test/test2=RO /home/user/Desktop/test/test3
user@host:~/Desktop/test$ ls -l test3
-rw-r--r-- 1 user user 14 2010-06-25 11:34 fileA.txt
-rw-r--r-- 1 user user 14 2010-06-25 11:34 fileB.txt

จากนั้นฉันจะยกเลิกการต่อเชื่อมไดเรกทอรีใหม่

user@host:~/Desktop/test$ sudo umount test3

แล้วลองสิ่งนี้

user@host:~/Desktop/test$ unionfs-fuse /home/user/Desktop/test/test1=RW:/home/user/Desktop/test/test2=RO /home/user/Desktop/test/test1
fuse: mountpoint not empty
fuse: if you are sure this is safe, use the 'nonempty' mount option

ซึ่งฉันไม่ได้คาดหวังอย่างแน่นอน ดังนั้นฉันจึงคิดว่า "อะไรคือห่าลองดูสิ"

user@host:~/Desktop/test$ unionfs-fuse /home/user/Desktop/test/test1=RW:/home/user/Desktop/test/test2=RO /home/user/Desktop/test/test1 -o nonempty
user@host:~/Desktop/test$ ls -l test1

คำสั่งแรกดำเนินการ แต่คำสั่งที่สองหยุดทำงาน ... ใครก็ตามที่อธิบายว่าทำไม ฉันคิดว่า unionfs อนุญาตให้รวมสองไดเรกทอรีเป็นหนึ่งในสองจุดเป็นจุดเชื่อมต่อ อย่างน้อยนั่นคือสิ่งที่จำนวนบทเรียนของ unionfs ระบุไว้ มีวิธีทำสิ่งที่ฉันต้องการหรือไม่? ตัวเลือกอื่น ๆ ?


ฉันมีฟอร์กบุ๊กฟิวส์ยูเนี่ยนกับฉันดังนั้นฉันไม่แน่ใจว่ามันเป็นผู้ใหญ่ มีตัวเลือกอื่น ๆ : mhddfs (อิงฟิวส์, เดเบียน), aufs (จากต้นไม้ แต่สร้างด้วยเมล็ดอูบุนตู) หวังว่า Val Aurora จะทำให้การติดตั้งแบบยูเนี่ยนถูกต้องและในเคอร์เนล
Tobu

คำตอบ:


1

นี่คือกรณีการใช้งานที่ผ่านการทดสอบบนระบบ Ubuntu (K) (Linux step3 3.13.0-63-generic # 103-Ubuntu SMP x86_64 x86_64 x86_64 GNU / Linux)

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

สำหรับการติดตั้ง Ubuntu แบบมาตรฐาน (K) โปรดตรวจสอบให้แน่ใจว่ามีการติดตั้งแพ็คเกจ "unionfs-fuse" - อาจติดตั้งโดยใช้บรรทัดคำสั่ง "sudo apt-get install unionfs-fuse"

ตัวอย่างเช่นคำแนะนำต่อไปนี้อธิบายถึงวิธีการซ้อนทับไดเรกทอรีที่มีอยู่ไม่ว่าง (ผู้ใช้ตามบ้าน) ที่มีอยู่ "ด้วยตัวเอง" เพื่อให้การเปลี่ยนแปลงทั้งหมดจะถูกเก็บถาวรในไดเรกทอรี (กรณีที่ 1) หรือทิ้งต่อไป (กรณีที่ 2)

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

ไฟล์ที่สร้างหรือแก้ไขในไดเรกทอรี "ดั้งเดิม" จะใช้ได้เฉพาะในไดเรกทอรี "เปลี่ยนแปลง" ไฟล์ที่สร้างในไดเรกทอรี "ย้ายที่ใหม่" จะยังคงอยู่ในไดเรกทอรี "ดั้งเดิม" แต่จะไม่อยู่ในไดเรกทอรี "เปลี่ยนแปลง"

  1. ทำให้ dir (ไม่ว่าง) (เช่น / home / user1) ไม่สามารถเขียนได้ดังนั้นการเปลี่ยนแปลงทั้งหมดและไฟล์ที่สร้างขึ้นใหม่ทั้งหมดจะยังคงอยู่ถาวร (ใน / tmp / home_user1_changes)

1.1 สร้างไดเรกทอรีเสริม

1.1.1 mkdir / tmp / home_user1_changes

1.1.2 mkdir / tmp / home_user1_relocated

1.2 ใช้ตัวเลือกการเชื่อมโยงเพื่อเมานต์ไดเรกทอรีไปยัง dir "overlay unwritable" (/ tmp / home_user1_relocated)

1.2.1 เมานต์ - ผูก / home / user1 / tmp / home_user1_relocated

1.3 ใช้ระบบไฟล์ unionfs เพื่อรวมเนื้อหาต้นฉบับที่ย้ายไปอยู่กับเนื้อหาของ "การเปลี่ยนแปลง" dir

1.3.1 unionfs-ฟิวส์ -o cow -o allow_other -o use_ino -o nonempty / tmp / home_user1_changes = RW: / tmp / home_user1_relocated = RO / home / user1

[ตอนนี้การเปลี่ยนแปลงทั้งหมดใน / home / user1 ถูกบันทึกใน / tmp / home_user1_changes แต่ไม่ได้อยู่ใน "วางซ้อน" / home / user1]

1.4 การย้อนกลับ

1.4.1 umount / home / user1

1.4.2 umount / tmp / home_user1_relocated

1.4.3 เลือกตรวจสอบไฟล์ใน / tmp / home_user1_changes

1.4.4 ทางเลือก rm -fR / tmp / home_user1_changes, rmdir / tmp / home_user1_relocated

[/ home / user1 อยู่ในสถานะเหมือนก่อน 1, การแก้ไขตั้งแต่นั้นจะอยู่ใน / tmp / home_user1_changes]

  1. กำหนดให้ (ไม่ว่าง) dir (เช่น / home / user1) ไม่สามารถเขียนทับได้ดังนั้นการเปลี่ยนแปลงทั้งหมดและไฟล์ที่สร้างขึ้นใหม่ทั้งหมดจะคงอยู่ชั่วคราวเท่านั้น (ใน / tmp / home_user1_changes)

2.1 สร้างไดเรกทอรีเสริม

2.1.1 mkdir / tmp / home_user1_changes

2.1.2 mkdir / tmp / home_user1_relocated

2.2 ใช้ตัวเลือกการเชื่อมโยงเพื่อติดตั้งไดเรกทอรีไปยัง dir "overlay unwritable" (/ tmp / home_user1_relocated)

2.2.1 เมานต์ - ผูก / home / user1 / tmp / home_user1_relocated

2.3 บังคับให้ / tmp / home_user1_changes dir เป็นชั่วคราว

2.3.1 mount -t tmpfs -o size = 20% none / tmp / home_user1_changes

2.4 ใช้ระบบไฟล์ unionfs เพื่อรวมเนื้อหาต้นฉบับที่ย้ายไปอยู่กับเนื้อหาของ "การเปลี่ยนแปลง" dir

2.4.1 unionfs ฟิวส์ -o -o allow_other -o use_ino -o nonempty / tmp / home_user1_changes = RW: / tmp / home_user1_relocated = RO / home / user1

[ตอนนี้การเปลี่ยนแปลงทั้งหมดใน / home / user1 ถูกบันทึกใน / tmp / home_user1_changes แต่ไม่ได้อยู่ใน "วางซ้อน" / home / user1]

2.5 ย้อนกลับ

2.5.1 umount / home / user1

2.5.2 umount / tmp / home_user1_relocated

2.5.3.1 เลือกตรวจสอบไฟล์ใน / tmp / home_user1_changes

2.5.3.2 umount / tmp / home_user1_changes [จะทำให้การเปลี่ยนแปลงหายไป]

2.5.4 เลือก rm -fR / tmp / home_user1_changes, rmdir / tmp / home_user1_relocated

[/ home / user1 อยู่ในสถานะเหมือนก่อน 1 การปรับเปลี่ยนจะหายไป]

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