Đây câu trả lời và thông điệp email chỉ ra rằng một cái gì đó gọi là "OverlayFS" có sẵn trong Ubuntu 11.10 và mạnh mẽ sẽ thay thế aufs trong Ubuntu 12.04.
Làm thế nào để tôi sử dụng nó? Tài liệu của nó ở đâu?
Đây câu trả lời và thông điệp email chỉ ra rằng một cái gì đó gọi là "OverlayFS" có sẵn trong Ubuntu 11.10 và mạnh mẽ sẽ thay thế aufs trong Ubuntu 12.04.
Làm thế nào để tôi sử dụng nó? Tài liệu của nó ở đâu?
Câu trả lời:
Chỉnh sửa: Kể từ khi viết câu trả lời này, một số điều đã thay đổi trong lớp phủ, cụ thể là việc thêm một tham số bắt buộc workdir
, xem câu trả lời của tott bên dưới để biết mô tả chi tiết về tham số mới này.
Cuối cùng tôi cũng tìm được nó. Tôi đã tìm thấy các tham chiếu đến nó trong nguồn kernel, nhưng vì một số lý do, nó không xuất hiện trong cây git trên kernel.org. Nhưng! Nếu bạn lấy nguồn kernel Ubuntu như thế này: apt-get source linux-image-3.0.0-16-generic
bạn có thể tìm thấy nó trong linux-3.0.0/Documentation/overlayfs.txt
. Nó cũng có sẵn trong gói linux-doc /usr/share/doc/linux-doc/filesystems/overlayfs.txt.gz
.
Vì tài liệu trợ giúp thực tế là nhiều hơn "cách thức hoạt động" thay vì "cách gắn kết với nó", đây là một tóm tắt ngắn gọn (có một ví dụ trong tài liệu kernel):
mount -t overlayfs -o [mount options] overlayfs [mountpoint for merged system]
Trong đó [tùy chọn gắn kết] có thể là:
Một điều khiến tôi bối rối lúc đầu, vì vậy tôi có lẽ nên làm rõ, đó là việc gắn một lớp phủ không thực sự gắn kết một hệ thống tập tin. Tôi đã cố gắn hệ thống tập tin squashfs bằng cách sử dụng mount overlayfs, nhưng đó không phải là cách nó hoạt động. Trước tiên, bạn phải gắn hệ thống tệp (trong trường hợp của tôi là squashfs) vào một thư mục tùy ý, sau đó sử dụng lớp phủ để hợp nhất điểm gắn kết (một thư mục) và một thư mục khác vào thư mục cấp ba (điểm gắn kết lớp phủ) (chỉnh sửa: thư mục "đại học" này thực sự có thể là thư mục Upperdir =). Thư mục cấp ba là nơi bạn sẽ thấy các hệ thống tệp được hợp nhất (hoặc cây thư mục - nó linh hoạt).
Tôi đã làm việc trên một đĩa khởi động lai Ubuntu, trong đó hệ thống Ubuntu cơ sở tồn tại dưới dạng filesystem.squashfs và tôi có các tệp có tên ub Ubuntu.overlay kubfox.overlay xubfox.overlay và mỡ Ubuntu.overlay. Các tệp .overlay là các bản cài đặt cơ bản của các hệ thống đã nói với nội dung của filesystem.squashfs được cắt tỉa (để tiết kiệm dung lượng). Sau đó, tôi đã sửa đổi các tập lệnh init để phủ lớp tệp .overlay chính xác (từ một tham số khởi động) bằng cách sử dụng lớp phủ và các tùy chọn ở trên và nó hoạt động như một bùa mê!
Đây là những dòng mà tôi đã sử dụng trong tập lệnh init của mình (một khi tất cả các biến được dịch):
mkdir -p /overlay
mount -t squashfs /cdrom/casper/ubuntu.overlay /overlay
mount -t overlayfs -o lowerdir=/filesystem.squashfs,upperdir=/overlay overlayfs /
Lưu ý rằng filesystem.squashfs ở trên là một thư mục được tạo bởi casper, không phải là một tệp.
Ba câu lệnh này tạo ra một /overlay
thư mục, gắn kết một hệ thống tập tin squashfs trên /overlay
thư mục và sau đó sử dụng OverlayFS để hợp nhất các nội dung của /overlay
hơn /
.
Trong quá trình xây dựng lại USB trực tiếp của tôi cho mỗi bản phát hành, tôi sử dụng OverlayFS để tiết kiệm rất nhiều thời gian. Tôi bắt đầu với một thư mục có tên ubfox-base chứa nội dung của hình ảnh lõi ub Ubuntu là cài đặt cơ bản nhất. Sau đó, tôi sẽ tạo các thư mục có tên là ubfox, kubfox, mỡ Ubuntu và xubfox.
Sau đó, tôi sử dụng OverlayFS để làm cho các tệp từ cơ sở Ubuntu xuất hiện trong các thư mục riêng lẻ. Tôi sẽ sử dụng một cái gì đó như thế này:
mount -t overlayfs -o lowerdir=ubuntu-base,upperdir=kubuntu overlayfs kubuntu
Điều này làm cho các tệp từ ubfox-base hiển thị trong thư mục kubfox. Sau đó, tôi có thể chroot
vào thư mục kubfox và làm một cái gì đó như apt-get install kubuntu-desktop
. Mọi thay đổi được thực hiện trong khi gắn kết OverlayFS này sẽ vẫn ở thư mục trên, trong trường hợp này là thư mục kubfox. Sau đó, một khi tôi ngắt kết nối OverlayFS, các tệp thực sự tồn tại trong cơ sở Ubuntu nhưng được "nhân đôi" vào thư mục kubfox biến mất trừ khi chúng bị thay đổi. Điều này giúp tôi không phải có nhiều bản sao của các tệp trong cơ sở Ubuntu trong khi vẫn có thể sử dụng chúng như thể chúng tồn tại trên thực tế ở mỗi vị trí.
overlay
không cóoverlayfs
Từ https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt :
Trên và dưới
Hệ thống tệp lớp phủ kết hợp hai hệ thống tệp - hệ thống tệp 'trên' và hệ thống tệp 'dưới'. Khi một tên tồn tại trong cả hai hệ thống tệp, đối tượng trong hệ thống tệp 'trên' sẽ hiển thị trong khi đối tượng trong hệ thống tệp 'dưới' bị ẩn hoặc, trong trường hợp thư mục, được hợp nhất với đối tượng 'trên'.
Sẽ đúng hơn nếu đề cập đến một 'cây thư mục' trên và dưới thay vì 'hệ thống tập tin' vì cả hai cây thư mục đều nằm trong cùng một hệ thống và không có yêu cầu nào phải lấy gốc của hệ thống tập tin hoặc trên hoặc dưới.
Hệ thống tệp thấp hơn có thể là bất kỳ hệ thống tệp nào được Linux hỗ trợ và không cần phải ghi. Hệ thống tập tin thấp hơn thậm chí có thể là một lớp phủ khác. Hệ thống tập tin phía trên thường sẽ có thể ghi được và nếu nó phải hỗ trợ việc tạo các thuộc tính đáng tin cậy. * Mở rộng và phải cung cấp d_type hợp lệ trong các phản hồi readdir, vì vậy NFS không phù hợp.
Lớp phủ chỉ đọc của hai hệ thống tệp chỉ đọc có thể sử dụng bất kỳ loại hệ thống tệp nào.
Thư mục
Lớp phủ chủ yếu liên quan đến các thư mục. Nếu một tên cụ thể xuất hiện trong cả hai hệ thống tập tin trên và dưới và đề cập đến một thư mục không thuộc một trong hai thì đối tượng thấp hơn sẽ bị ẩn - tên chỉ liên quan đến đối tượng trên.
Trong đó cả hai đối tượng trên và dưới là các thư mục, một thư mục hợp nhất được hình thành.
Tại thời điểm gắn kết, hai thư mục được cung cấp dưới dạng tùy chọn gắn kết "lowdir" và "Upperdir" được kết hợp thành một thư mục hợp nhất:
mount -t overlay overlay -olowerdir=/lower,upperdir=/upper,workdir=/work /merged
"Workdir" cần phải là một thư mục trống trên cùng một hệ thống tập tin như Upperdir.
Sau đó, bất cứ khi nào một tra cứu được yêu cầu trong một thư mục được hợp nhất như vậy, việc tra cứu được thực hiện trong mỗi thư mục thực tế và kết quả kết hợp được lưu trong bộ đệm thuộc hệ thống tập tin lớp phủ. Nếu cả hai tra cứu thực tế tìm thấy các thư mục, cả hai đều được lưu trữ và một thư mục hợp nhất được tạo ra, nếu không thì chỉ có một thư mục được lưu trữ: phía trên nếu nó tồn tại, nếu không thì thấp hơn.
Chỉ có danh sách các tên từ thư mục được hợp nhất. Các nội dung khác như siêu dữ liệu và các thuộc tính mở rộng chỉ được báo cáo cho thư mục trên. Các thuộc tính của thư mục thấp hơn được ẩn.
Tôi đã mở rộng các artikels này để bao gồm một Script cho các lớp phủ để thiết lập một fs gốc chỉ đọc.
Hy vọng nó giúp.
Ví dụ runnable tối thiểu
# 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
Đầu ra của đầu tiên ls
với mount:
lower:
lost+found lower-file
overlay:
lost+found lower-file overlay-file upper-file
upper/upper:
overlay-file upper-file
upper/work:
work
Đầu ra thứ hai ls
không có giá đỡ:
lower:
lost+found lower-file
upper/upper:
overlay-file upper-file
upper/work:
work
Diễn dịch:
work/
thư mục) chúng ta không nên quan tâmVí dụ được điều chỉnh từ: Ví dụ sử dụng OverlayFS
Dưới đây là một ví dụ phức tạp hơn với nhiều lớp thấp hơn: Lớp phủ tải lại với nhiều lớp (di chuyển khỏi aufs)
Đã thử nghiệm trên Ubuntu 18.04, nhân Linux 4.15.0.
mount -t overlayfs -o rw,uppderdir=x,lowerdir=y overlayfs /mount/point
. Ngoài ra tôi không biết gì. Tôi đang mày mò với nó trong một hệ thống trực tiếp, nhưng tôi vẫn chưa thể làm cho nó hoạt động được. Tôi ước tôi có thể tìm ra chính xác "Upperdir" và "Lowerdir" nghĩa là gì. Tôi không tìm thấy gì cả.