LXC: Làm cách nào để gắn thư mục từ máy chủ vào thùng chứa?


24

Tôi đang cố gắn một thư mục trên máy chủ vào một thùng chứa LXC.

Máy chủ lưu trữ có một thư mục /mnt/ssd/solr_datađược tạo (cái này hiện đang nằm trong hệ thống tập tin gốc, nhưng sau này tôi sẽ gắn ổ SSD ở đó, vì vậy tôi đang chuẩn bị cho điều đó).

Tôi muốn thư mục đó gắn kết như /datatrong container.

Vì vậy, trong tập tin container fstab tôi có những điều sau đây:

/mnt/ssd/solr_data      /var/lib/lxc/Solr4StandAlone/rootfs/data        ext4    defaults,noatime        0       0

Nhưng đó là điều không nên, tôi gặp lỗi này khi khởi động container:

lxc-start: No such file or directory - failed to mount '/mnt/ssd/solr_data' on '/usr/lib/x86_64-linux-gnu/lxc//data'
lxc-start: failed to setup the mounts for 'Solr4StandAlone'
lxc-start: failed to setup the container
lxc-start: invalid sequence number 1. expected 2
lxc-start: failed to spawn 'Solr4StandAlone'

Câu trả lời:


16

Để tạo thư mục tự động trong vùng chứa, bạn cũng có thể thêm create=dirtùy chọn trong fstab:

/mnt/ssd/solr_data      /var/lib/lxc/Solr4StandAlone/rootfs/data        none   bind,create=dir

Chỉnh sửa: đây là cụ thể cho LXC. Xem chủ đề này

Giống như chúng ta đã có "tùy chọn", điều này thêm hai cờ gắn kết cụ thể LXC mới:

  • tạo = dir (sẽ thực hiện một mkdir_p trên đường dẫn)

  • tạo = tập tin (sẽ thực hiện một mkdir_p trên dirname + một fopen trên đường dẫn)

Điều này được thúc đẩy bởi một số gắn kết cần thiết cho các container không có đặc quyền.


1
Phiên bản nào của mountđiều này áp dụng cho? Tôi không thể tìm thấy tùy chọn được mô tả trong mount(8)Ubuntu 14.04 chẳng hạn.
0xC0000022L

Cũng không có trong bản mới nhấtmount(8)
0xC0000022L

2
thực sự ... có vẻ như nó chỉ hoạt động với lxc. Xem chủ đề này trên lxc-devel ML
little-dude

14

Trong /var/lib/lxc/Solr4StandAlone/configthêm một đọc dòng:

lxc.mount.entry = /mnt/ssd/solr_data  /var/lib/lxc/Solr4StandAlone/rootfs/data none bind 0 0

Sau đó lxc-stopdừng container lxc-startcủa bạn và container của bạn một lần nữa.

Đó là tất cả những gì cần thiết.

ref: liên kết tham khảo


2
Giải pháp của bạn sẽ được xem xét tốt hơn vì nó hoạt động với công cụ container LXC không được ưu tiên. Những người khác sẽ không làm việc trong trường hợp này. Và có lẽ selinux / apport sẽ cần phải được điều chỉnh để cho phép phương thức của họ. +1 cho giải pháp của bạn!
Huygens

11

Tôi đã phải tạo /datathư mục trong vùng chứa cục bộ trước khi mount hoạt động bình thường.

Tôi cũng đã sử dụng mục fstab này:

/mnt/ssd/solr_data      /var/lib/lxc/Solr4StandAlone/rootfs/data        none   bind     0       0

bindtùy chọn gắn kết là một cái gì đó đã bị thiếu trong OP. Tôi tin rằng đó là sự điều chỉnh quan trọng nhất (cũng có trong tất cả các câu trả lời làm việc khác).
imz - Ivan Zakharyaschev

9

Kể từ 2015/09/30, một thay đổi do bản vá bảo mật phá vỡ việc gắn kết thành một đường dẫn tuyệt đối với lxc.mount.entry trong tệp cấu hình.

Thay vào đó bạn có thể sử dụng một đường dẫn tương đối

 lxc.mount.entry = /mnt/ssd/solr_data data none bind 0 0

Xem: https://wiki.debian.org/LXC#Bind_mounts_inside_the_container


Ngoài ra, nó hoạt động như một câu trả lời, nó sẽ được nâng cấp để mọi người sớm thấy nó. Cảm ơn đã thêm vào nó!
David

6

Vì LXC đã thay đổi theo thời gian nên điều này có thể rất đơn giản, nhưng nó làm tôi bối rối một chút, vì vậy muốn đóng góp. Tôi cũng đã tạo ra một ý chính cho việc này để tôi có thể nhớ bản thân mình, nhưng chỉ cần sử dụng thiết bị cấu hình lxc sẽ thực hiện thủ thuật.

sudo lxc config device add Solr4StandAlone sdb disk source=/var/lib/lxc/Solr4StandAlone/rootfs/data path=mnt/ssd/solr_data

Lưu ý Điều quan trọng là phải bỏ dấu gạch chéo phía trước khỏi đối số đường dẫn do thay đổi được đề cập bởi @biscNinja

Gắn thư mục từ container đến máy chủ


1

Nếu bạn đang sử dụng libvirtđể tạo vùng lxcchứa của mình , bạn có thể đặt thư mục trên máy chủ passthroughnhư được hiển thị ở đây:

root@localhost:/# cat /etc/libvirt/lxc/my_container.xml
...
 <filesystem type='mount' accessmode='passthrough'>
    <source dir='<dir on host>'/>
    <target dir='<dir on container>'/>
 </filesystem>
....
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.