Chia sẻ CIFS tự động trên máy tính xách tay


8

Tôi đã thấy các câu hỏi tương tự như câu hỏi này trước đây trong một số biến thể, nhưng tôi vẫn chưa tìm được câu trả lời thỏa đáng.

Đây là những gì tôi có:

  • Một máy tính xách tay Debian có tính di động cao, chuyển đổi mạng thường xuyên.
  • Một máy chủ FreeNAS tại nhà với một loạt các cổ phiếu CIFS trên đó.

Đây là những gì tôi muốn:

  • Nếu tôi truy cập thư mục chia sẻ CIFS khi tôi ở nhà, hãy tự động gắn kết chia sẻ CIFS.
  • Nếu tôi truy cập vào chia sẻ CIFS khi tôi ở bất kỳ nơi nào khác, hãy trả lại lỗi ngay lập tức (nghĩa là không xem xét mạng trong năm phút trước khi tìm ra NAS không có ở đó).
  • Khi tôi tạm dừng hoặc ngủ đông máy, hãy ngắt kết nối một cách sạch sẽ để giá treo không hướng vào không khí mỏng khi máy thức dậy trở lại. Nếu chia sẻ không thể được xóa sạch (một quá trình đang sử dụng một thư mục), thì:
    • Hủy bỏ việc đình chỉ / ngủ đông và cho tôi biết ai đang cắm trại trên đỉnh núi; hoặc là
    • Buộc unmount anyway và tiến hành đình chỉ / ngủ đông.
  • Tín dụng bổ sung: Khi kết nối mạng giảm (rút phích cắm hoặc mất liên kết với WAP), hãy cố gắng ngắt kết nối một cách sạch sẽ.
  • Tín dụng bổ sung: Phép thuật này phải độc lập với người quản lý mạng đang sử dụng.

Không có tùy chọn nào tôi từng đọc có vẻ phù hợp:

  • autofs có vẻ đáng tin cậy, nhưng dường như không có bất kỳ nhận thức nào về việc đình chỉ / ngủ đông.
  • Các _netdevtùy chọn trong mount/etc/fstabvẻ thú vị, nhưng dường như chỉ để áp dụng cho cổ phiếu NFS.
  • Tôi chưa thể đi gvfslàm, nhưng sau đó tôi đã rất cố gắng.

Bất kỳ đề xuất về cách tiếp cận này?

ĐỊA CHỈ:

Đây là phiên bản ngắn của những gì tôi đã làm cho đến nay. Tôi đã cài đặt autofsvà viết một tập lệnh shell nhỏ để hết hạn tất cả các khối lượng được gắn tự động, được gọi bất cứ khi nào giao diện mạng bị hỏng.

Tôi đã tạo một bản đồ tự động cho máy chủ CIFS của mình, với thông tin đăng nhập được lưu trữ trong một tệp bên ngoài (yuck). Sau đó tôi đã viết kịch bản shell sau:

#!/bin/sh -e

# Expire everything in the automounter.
if [ -f /var/run/autofs.pid ]; then
    kill -USR1 "$(cat /var/run/autofs.pid)"
fi

Gửi tín hiệu USR1 đến daemon automount khiến nó buộc hết hạn tất cả các mount không sử dụng. Sau đó tôi đặt đoạn script này vào /etc/network/if-down.d/autofs, với một liên kết mềm /etc/network/if-post-down.d/autofs. NetworkManager gọi tất cả các tập lệnh trong thư mục sau khi kết nối bị rớt, do đó, bất kỳ hệ thống tập tin được gắn tự động nào cũng cần được ngắt kết nối.

Tuy nhiên, tôi không hài lòng lắm với sự sắp xếp này. Để bắt đầu, autofskhông phân biệt giữa các khối được gắn tự động và, khi nhận được USR1, sẽ ngắt kết nối tất cả các khối không hoạt động, bao gồm cả các khối không phải mạng, khá nặng tay.

Hơn nữa, mật khẩu đăng nhập cho máy chủ CIFS phải được lưu trữ trong một tệp. Tôi rất muốn được nhắc nhở cho nó.

Dù sao, đó là những gì tôi đã gắn bó với nhau cho đến nay. Nó hoạt động, nhưng tôi sẽ rất vui khi sử dụng thứ gì đó tốt hơn ...


Bạn có thể muốn xem công cụ Gigolo: uvena.de/gigolo/index.html . Tôi sử dụng nó để quản lý việc thiết lập lại SMB mount b / w home và làm việc trên máy tính xách tay của tôi.
slm

@slm: Gigolo có vẻ thú vị, nhưng dường như không có cách nào để thay đổi các tùy chọn gắn kết. Kết quả là, chia sẻ xuất hiện trong chế độ mà tôi gọi là chế độ "câm FAT", trong đó tất cả các tệp và thư mục đều có quyền 0700. Ngược lại, gắn cùng một chia sẻ sử dụng sudo mount -t cifs ...kết quả tốt hơn. Tôi sẽ quan tâm đến nó nhiều hơn một chút, nhưng tôi không nghĩ Gigolo hoàn toàn là thứ tôi đang tìm kiếm.
ewhac

Câu trả lời:


2

Nếu bạn sử dụng Trình quản lý mạng, bạn có thể viết các tập lệnh thực thi trên giao diện mạng sắp tới hoặc đi xuống.

NetworkManager sẽ thực thi các tập lệnh trong thư mục /etc/NetworkManager/dispatcher.d theo thứ tự bảng chữ cái để đáp ứng với các sự kiện mạng. Mỗi tập lệnh phải là (a) một tệp thông thường, (b) thuộc sở hữu của root, (c) không thể ghi theo nhóm hoặc khác, (d) không được đặt-uid, (e) và được thực thi bởi chủ sở hữu. Mỗi tập lệnh nhận được hai đối số, đầu tiên là tên giao diện của thiết bị vừa được kích hoạt và thứ hai là một hành động.

Ví dụ, phát hiện mạng của bạn từ miền tìm kiếm và sau đó gắn kết hoặc mở rộng khi giao diện trực tuyến:

#!/bin/bash
#/etc/NetworkManager/dispatcher.d/mount-my-cifs    
case "$2" in
  up)
    # some logic to detect if we're at home
    grep "search myhome.local" /etc/resolv.conf
    if [ "$?" != "0" ] ; then 
       exit
    else 
       mount /mnt/cifs
    fi
    ;;
  down)
       umount /mnt/cifs
    ;;
esac

Trên giả định rằng CIFS gắn kết được định nghĩa trong /etc/fstabvới noautotùy chọn
HBruijn

Vui lòng thêm giả định đó vào câu trả lời.
Chảy máu ngón tay
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.