Làm thế nào để thiết lập một thiết bị lặp khi khởi động?


14

Tôi muốn thiết lập một thiết bị lặp khi khởi động. Tôi tự hỏi đâu là cách tốt nhất để làm điều này.

Tôi đã tìm kiếm nó trên google. Một số người nói thêm quy tắc udev, một số nói rằng đưa tập lệnh vào /etc/init.d, một số thậm chí sửa đổi initramfs.

Vì vậy, cách tốt nhất hoặc đúng để làm điều này là gì? Bạn có thể vui lòng cho một số chi tiết (về cách làm)?

Cảm ơn bạn.


Tôi sẽ đi cùng /etc/init.d/something, hoặc /etc/rc.local, nhưng tôi đề nghị ở lại với bất kỳ phương pháp nào hiệu quả.
enzotib

6
Để làm gì? Nếu bạn muốn tập tin được gắn vào lúc khởi động, chỉ cần thêm nó vào / etc / fstab với tùy chọn vòng lặp và mount sẽ đảm nhiệm việc định cấu hình thiết bị loopback cho bạn.
psusi

@psusi: Cảm ơn lời khuyên của bạn, nhưng với mục đích của tôi, việc gắn kết là không đủ, và trên thực tế, tập tin không thể được gắn kết đơn giản. Nó là một hình ảnh đĩa chứ không phải là một hình ảnh phân vùng. Và tôi cần biết tên chính xác của thiết bị lặp để sử dụng nó để tạo một đĩa ảo trong VirtualBox. (Tôi tạo ra loại đĩa ảo này nghĩ rằng việc chia sẻ tệp giữa máy ảo và máy chủ dễ dàng hơn. Thư mục chia sẻ tích hợp không hoạt động đối với một số ứng dụng.)
Roun

4
Bạn chỉ có thể trỏ máy ảo vào tệp chứ không phải thiết bị loopback. Bạn cũng cần phải rất cẩn thận để đảm bảo rằng bạn không bao giờ chạy máy ảo (hoặc bị treo) và gắn hệ thống tệp trên máy chủ cùng một lúc, nếu không bạn sẽ làm hỏng fs. Vì lý do đó, tốt hơn hết là sử dụng mạng để có các tệp truy cập khách mà chủ nhà đang chia sẻ thông qua nfs hoặc samba hoặc sshfs.
psusi

@Roun: Các phân vùng trong tệp vẫn có thể được gắn kết, mặc dù bạn phải chỉ định phần bù của phân vùng từ đầu tệp (ví dụ: mount /disk.img /mnt -o loop,offset=2048đối với phân vùng đầu tiên). Có thể tìm thấy các offset bằng cách sử dụng parted hoặc fdisk sau khi thiết bị lặp được thiết lập (xem câu trả lời của tôi dưới đây để biết).
zanfur

Câu trả lời:


7

Có ít nhất ba cách "thích hợp" để thực hiện các công việc khởi động trong Ubuntu (giả sử bạn không chỉ muốn gắn kết nó), được liệt kê ở đây theo thứ tự ưu tiên giảm dần:

  1. /etc/init/*.conf (Mới bắt đầu)
  2. /etc/init.d/* (sysvinit)
  3. /etc/rc.local (kịch bản thay đổi runlevel)

Cũng có khả năng sử dụng các quy tắc udev, nhưng nó sẽ bị ảnh hưởng. Tôi đề nghị chống lại nó. Kịch bản sysvinit quá mức cần thiết cho một điều nhỏ như vậy, vì vậy tôi sẽ tập trung vào hai tùy chọn khác. Kịch bản thay đổi runlevel là đơn giản nhất (mặc dù ít được ưu tiên nhất), vì vậy tôi sẽ bắt đầu từ đó.

Các /etc/rc.localtập tin chỉ đơn giản là thực hiện bởi các /etc/init.d/rc.localkịch bản sysvinit, đó là (theo mặc định) thực hiện trước khi chuyển sang bất kỳ bình thường "trên" runlevel (ví dụ như khi bạn khởi động bình thường, nhưng không phải khi bạn đóng cửa hoặc vào chế độ phục hồi). Để thực hiện thiết lập thiết bị khởi động, chỉ cần thêm phần này vào cuối /etc/rc.local, giả sử rằng tệp của bạn được gọi /srv/diskimagevà bạn muốn sử dụng /dev/loop0làm thiết bị lặp:

losetup /dev/loop0 /srv/diskimage

Đó thực sự là tất cả để có nó. Tất nhiên, thay thế tên tệp bằng bất cứ thứ gì hoạt động tốt nhất trên thiết lập của bạn.

Nếu bạn muốn cụ thể hơn một chút về nó, bạn có thể tạo một công việc Upstart cho nó để thiết lập nó một khi hệ thống tập tin giữ nó đã được gắn kết. Một ví dụ sẽ là như sau, giả sử đó /srvlà điểm gắn kết chứa diskimagetệp của bạn :

description     "Setup loop devices after filesystems are mounted"

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

Điều này đủ đơn giản để tuân theo khái niệm: Dòng đầu tiên chỉ là một nhận xét cho độc giả của con người và hướng dẫn Upstart để đợi cho đến khi /srvhệ thống tập tin được gắn kết, thực hiện quy trình losetup và xem xét chính mình khi quá trình thoát thành công (a " nhiệm vụ ", trái ngược với một dịch vụ liên tục). Chỉ cần đặt những nội dung đó trong một tập tin phù hợp /etc/init/*.conf. Tôi sẽ chọn /etc/init/losetup.conf, bản thân mình.

Những lợi thế của công việc Upstart so /etc/rc.localvới một điều đơn giản như vậy là nhỏ nhưng quan trọng. Đầu tiên, /etc/rc.localkhông được dùng nữa, và việc sử dụng nó như là một "hộp cát lộn xộn để hoàn thành công việc" được mọi người ngày nay cau mày. Trong số các lý do khác để sử dụng nó, một số chương trình sử dụng tệp đó sẽ đơn giản ghi đè lên nội dung và rất khó để điều chỉnh các tập lệnh khác nhau cần vào cùng một tệp. Thứ hai, Upstart thực sự xử lý việc kiểm tra phụ thuộc cho bạn (đảm bảo hệ thống tệp được gắn kết trước), vì vậy nếu có sự cố khi cài đặt hệ thống tệp, nó sẽ khôngcố gắng thiết lập thiết bị lặp .... nhưng một khi bạn đã giải quyết và gắn nó. Thứ ba, Upstart linh hoạt hơn rất nhiều: ví dụ, bạn có thể đủ thông minh để tìm một thiết bị lặp không sử dụng và "phát ra" thiết bị lặp đó để sử dụng trong các công việc mới bắt đầu khác, tương tự như cách chúng tôi sử dụng biến "MOUNTPOINT" trong ví dụ này ở trên.


Làm thế nào /etc/init/losetup.conf được gọi ??? Nó không hoạt động với tôi ...
Imran

1

Như @psusi đã chỉ ra, cách dễ nhất là thêm dòng sau vào /etc/fstabtệp của bạn

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

Bây giờ khởi động lại hoặc chạy mount -anhư root. Sau đó, thiết bị nên được gắn kết. Bạn có thể kiểm tra với lsblk.

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.