นี้คำตอบและข้อความอีเมลที่แสดงให้เห็นว่าสิ่งที่เรียกว่า "OverlayFS" สามารถใช้ได้ในอูบุนตู 11.10 และเข้มแข็งจะเข้ามาแทนที่ aufs ใน Ubuntu 12.04
ฉันจะใช้มันได้อย่างไร เอกสารของมันอยู่ที่ไหน
นี้คำตอบและข้อความอีเมลที่แสดงให้เห็นว่าสิ่งที่เรียกว่า "OverlayFS" สามารถใช้ได้ในอูบุนตู 11.10 และเข้มแข็งจะเข้ามาแทนที่ aufs ใน Ubuntu 12.04
ฉันจะใช้มันได้อย่างไร เอกสารของมันอยู่ที่ไหน
คำตอบ:
แก้ไข: เนื่องจากการเขียนคำตอบนี้บางสิ่งมีการเปลี่ยนแปลงในโอเวอร์เลย์คือการเพิ่มพารามิเตอร์ที่จำเป็นworkdir
ดูคำตอบของ tottiด้านล่างสำหรับคำอธิบายโดยละเอียดของพารามิเตอร์ใหม่นี้
ในที่สุดฉันก็หามันเจอ ฉันพบการอ้างอิงถึงที่มาในเคอร์เนล แต่ด้วยเหตุผลบางอย่างมันไม่ปรากฏในทรี git บน kernel.org แต่! ถ้าคุณดึงมาเคอร์เนล Ubuntu เช่นนี้คุณสามารถค้นหาได้ในapt-get source linux-image-3.0.0-16-generic
linux-3.0.0/Documentation/overlayfs.txt
นอกจากนี้ยังมีอยู่ในแพ็คเกจ linux-doc /usr/share/doc/linux-doc/filesystems/overlayfs.txt.gz
ด้วย
เนื่องจากเอกสารวิธีใช้จริงเป็นมากกว่า "วิธีการทำงาน" แทนที่จะเป็น "วิธีติดตั้งด้วย" นี่เป็นบทสรุปสั้น ๆ (มีตัวอย่างหนึ่งในเอกสารประกอบเคอร์เนล):
mount -t overlayfs -o [mount options] overlayfs [mountpoint for merged system]
โดยที่ [ตัวเลือกการเมานท์] สามารถ:
สิ่งหนึ่งที่ทำให้ฉันสับสนในตอนแรกดังนั้นฉันควรจะชี้แจงว่าการติดตั้งโอเวอร์เลย์ไม่ได้ติดตั้งระบบไฟล์ ฉันพยายามเมานต์ระบบไฟล์สควอชโดยใช้การเมานต์แบบโอเวอร์เลย์ แต่นั่นไม่ใช่วิธีการทำงาน คุณต้องเมานต์ระบบไฟล์ (ในกรณีของฉันสควอช) ไปยังไดเรกทอรีโดยพลการจากนั้นใช้โอเวอร์เลย์เพื่อรวมจุดเมานท์ (ไดเรกทอรี) และไดเรกทอรีอื่นเข้าสู่ไดเร็กทอรีตติยภูมิ (จุดเมานท์โอเวอร์เลย์) จริง ๆ แล้วสามารถเป็นไดเรกทอรีบน = =) ไดเร็กทอรีตติยภูมิคือที่ที่คุณจะเห็นระบบไฟล์ที่ผสาน (หรือแผนผังไดเร็กทอรี - ซึ่งยืดหยุ่นได้)
ฉันทำงานบนดิสก์บูตไฮบริดของ Ubuntu ที่มีระบบฐาน Ubuntu เป็น filesystem.squashfs และฉันมีไฟล์ชื่อ ubuntu.overlay kubuntu.overlay xubuntu.overlay และ lubuntu.overlay ไฟล์. overlay เป็นการติดตั้งพื้นฐานของระบบดังกล่าวพร้อมกับเนื้อหาของ filesystem.squashfs ที่ถูกตัด (เพื่อประหยัดพื้นที่) จากนั้นฉันก็แก้ไขสคริปต์ init เพื่อวางทับไฟล์. overlay ของ distro ที่ถูกต้อง (จากพารามิเตอร์การบู๊ต) โดยใช้ overlayfs และตัวเลือกด้านบนและทำงานได้อย่างมีเสน่ห์!
นี่คือบรรทัดที่ฉันใช้ในสคริปต์ init ของฉัน (เมื่อแปลตัวแปรทั้งหมดแล้ว):
mkdir -p /overlay
mount -t squashfs /cdrom/casper/ubuntu.overlay /overlay
mount -t overlayfs -o lowerdir=/filesystem.squashfs,upperdir=/overlay overlayfs /
โปรดทราบว่า filesystem.squashfs ด้านบนเป็นไดเรกทอรีที่สร้างโดยแคสเปอร์ไม่ใช่ไฟล์
ทั้งสามงบสร้าง/overlay
ไดเรกทอรีติดระบบแฟ้ม squashfs ใน/overlay
ไดเรกทอรีและจากนั้นใช้ OverlayFS เป็นหลักรวมเนื้อหาของมากกว่า/overlay
/
ในกระบวนการสร้าง USB สดใหม่สำหรับแต่ละรุ่นฉันใช้ OverlayFS เพื่อประหยัดเวลา ฉันเริ่มต้นด้วยไดเรกทอรีที่เรียกว่า ubuntu-base ซึ่งมีเนื้อหาของภาพ ubuntu-core ซึ่งเป็นการติดตั้งขั้นพื้นฐานที่สุด ฉันจะสร้างไดเรกทอรีที่เรียกว่า ubuntu, kubuntu, lubuntu และ xubuntu
จากนั้นฉันใช้ OverlayFS เพื่อสร้างไฟล์จาก ubuntu-base แสดงในแต่ละไดเรกทอรี ฉันจะใช้สิ่งนี้:
mount -t overlayfs -o lowerdir=ubuntu-base,upperdir=kubuntu overlayfs kubuntu
สิ่งนี้ทำให้ไฟล์จาก ubuntu-base ปรากฏขึ้นในโฟลเดอร์ kubuntu จากนั้นฉันสามารถchroot
ไปยังโฟลเดอร์ Kubuntu apt-get install kubuntu-desktop
และทำสิ่งที่ชอบ การเปลี่ยนแปลงใด ๆ ที่เกิดขึ้นระหว่างการเมานต์ OverlayFS นี้จะยังคงอยู่ในไดเรกทอรีด้านบนในกรณีนี้โฟลเดอร์ kubuntu จากนั้นเมื่อฉันยกเลิกการเมานท์ OverlayFS ก็จะทำการเมานท์ไฟล์ที่มีอยู่จริงใน ubuntu-base สิ่งนี้ทำให้ฉันไม่ต้องมีหลายสำเนาของไฟล์ใน ubuntu-base ในขณะที่ยังสามารถใช้งานได้ราวกับว่าพวกมันมีอยู่จริงในแต่ละตำแหน่ง
overlay
ไม่ได้overlayfs
จากhttps://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt :
บนและล่าง
ระบบไฟล์ซ้อนทับรวมสองระบบไฟล์ - ระบบไฟล์ 'บน' และระบบไฟล์ 'ล่าง' เมื่อชื่อมีอยู่ในทั้งสองระบบไฟล์วัตถุในระบบแฟ้ม 'ส่วนบน' จะมองเห็นได้ในขณะที่วัตถุในระบบแฟ้ม 'ด้านล่าง' อาจถูกซ่อนอยู่หรือในกรณีของไดเรกทอรีรวมกับวัตถุ 'ส่วนบน'
มันจะถูกต้องมากขึ้นในการอ้างถึง 'ไดเรกทอรีต้นไม้' ด้านบนและล่างแทนที่จะเป็น 'ระบบแฟ้ม' เนื่องจากเป็นไปได้มากที่ต้นไม้ไดเรกทอรีทั้งสองจะอยู่ในระบบแฟ้มเดียวกันและไม่มีข้อกำหนดว่าจะให้รากของระบบแฟ้มสำหรับ ทั้งบนหรือล่าง
ระบบไฟล์ที่ต่ำกว่าสามารถเป็นระบบไฟล์ใด ๆ ที่สนับสนุนโดย Linux และไม่จำเป็นต้องเขียนได้ ระบบไฟล์ที่ต่ำกว่าสามารถเป็นโอเวอร์เลย์อื่นได้ ระบบไฟล์ส่วนบนจะสามารถเขียนได้และถ้ามันจะต้องสนับสนุนการสร้างความน่าเชื่อถือ * คุณสมบัติเพิ่มเติมและจะต้องให้ d_type ที่ถูกต้องในการตอบสนอง readdir ดังนั้น NFS จึงไม่เหมาะ
การซ้อนทับแบบอ่านอย่างเดียวของระบบไฟล์แบบอ่านอย่างเดียวสองระบบอาจใช้ระบบไฟล์ประเภทใดก็ได้
ไดเรกทอรี
การวางซ้อนส่วนใหญ่เกี่ยวข้องกับไดเรกทอรี หากชื่อที่กำหนดปรากฏขึ้นในทั้งระบบไฟล์ด้านบนและด้านล่างและอ้างถึงไดเรกทอรีที่ไม่ใช่ในทั้งสองวัตถุด้านล่างจะถูกซ่อน - ชื่อหมายถึงวัตถุด้านบนเท่านั้น
ที่วัตถุทั้งบนและล่างเป็นไดเรกทอรีไดเรกทอรีที่ผสานจะเกิดขึ้น
ณ เวลาเมานต์สองไดเรกทอรีที่กำหนดให้เป็นตัวเลือกการเมานต์ "lowerdir" และ "upperdir" ถูกรวมเข้าในไดเรกทอรีที่ผสาน
mount -t overlay overlay -olowerdir=/lower,upperdir=/upper,workdir=/work /merged
"workdir" จะต้องเป็นไดเรกทอรีว่างเปล่าในระบบไฟล์เดียวกับ Upperdir
จากนั้นเมื่อใดก็ตามที่มีการร้องขอการค้นหาในไดเรกทอรีที่ผสานการค้นหาจะดำเนินการในแต่ละไดเรกทอรีจริงและผลที่ได้จะถูกแคชไว้ใน Dentry ซึ่งเป็นของระบบไฟล์ซ้อนทับ หากการค้นหาที่แท้จริงทั้งสองค้นหาไดเรกทอรีทั้งสองจะถูกเก็บไว้และไดเรกทอรีที่ผสานจะถูกสร้างขึ้นมิฉะนั้นจะถูกเก็บไว้เพียงหนึ่ง: ด้านบนถ้ามันมีอยู่อื่น ๆ ที่ต่ำกว่า
เฉพาะรายการของชื่อจากไดเรกทอรีที่ถูกผสาน เนื้อหาอื่น ๆ เช่นเมตาดาต้าและแอตทริบิวต์เพิ่มเติมมีการรายงานสำหรับไดเรกทอรีด้านบนเท่านั้น คุณลักษณะเหล่านี้ของไดเรกทอรีล่างถูกซ่อนอยู่
ฉันได้ขยายบทความเหล่านี้เพื่อรวมสคริปต์สำหรับ overlayfs ที่ตั้งค่ารูท fs แบบอ่านอย่างเดียว
หวังว่ามันจะช่วย
ตัวอย่างที่เรียกใช้น้อยที่สุด
# Create the filesystems.
dd if=/dev/zero of=lower.ext4 bs=1024 count=102400
mkfs -t ext4 lower.ext4
cp lower.ext4 upper.ext4
mkdir lower upper overlay
sudo mount lower.ext4 lower
sudo mount upper.ext4 upper
sudo chown "$USER:$USER" lower upper
printf lower-content > lower/lower-file
# Upper and work must be on the same filesystem.
mkdir upper/upper upper/work
printf upper-content > upper/upper/upper-file
# Work must be empty. E.g. this would be bad:
#printf work-content > upper/work/work-file
# Make the lower readonly to show that that is possible:
# writes actually end up on the upper filesystem.
sudo mount -o remount,ro lower.ext4 lower
# Create the overlay mount.
sudo mount \
-t overlay \
-o lowerdir=lower,upperdir=upper/upper,workdir=upper/work \
none \
overlay \
;
# Interact with the mount.
printf 'overlay-content' > overlay/overlay-file
ls lower upper/upper upper/work overlay
# Write to underlying directories while mounted
# gives undefined behaviour.
#printf lower-content-2 > lower/lower-file-2
#printf upper-content-2 > upper/upper-file-2
# Unmount the overlay and observe state.
sudo umount overlay
ls lower upper/upper upper/work
# Cleanup.
sudo umount upper lower
GitHub ต้นน้ำ
เอาท์พุทของครั้งแรกที่ls
มีภูเขา:
lower:
lost+found lower-file
overlay:
lost+found lower-file overlay-file upper-file
upper/upper:
overlay-file upper-file
upper/work:
work
เอาต์พุตของวินาทีที่ls
ไม่มีการเมาท์:
lower:
lost+found lower-file
upper/upper:
overlay-file upper-file
upper/work:
work
การตีความ:
work/
ไดเรกทอรี) บางอย่างที่เราไม่ควรสนใจตัวอย่างที่ดัดแปลงจาก: ตัวอย่างการใช้ OverlayFS
นี่คือตัวอย่างที่ซับซ้อนมากขึ้นที่มีเลเยอร์ที่ต่ำกว่าหลาย ๆ อัน: Overlayfs โหลดซ้ำกับเลเยอร์หลายรายการ (การย้ายออกจาก aufs)
ทดสอบกับ Ubuntu 18.04, Linux kernel 4.15.0
mount -t overlayfs -o rw,uppderdir=x,lowerdir=y overlayfs /mount/point
. เกินกว่าที่ฉันไร้เดียงสา ฉันกำลังแก้ไขมันในระบบออนไลน์ แต่ฉันยังไม่สามารถจัดการให้มันทำงานได้ ฉันหวังว่าฉันจะพบว่า "Upperdir" และ "Lowerdir" หมายถึงอะไร ฉันไม่พบอะไรเลย