2020-05-29

Linux 掛載 Windows 的網路芳鄰

Linux 要使用 Windows 分享出來的網路芳鄰的時候,需要將該共用的資料夾掛載到 Linux 上,利用
 
sudo mount -t cifs //xxx.xxx.xxx.xxx/share_folder /Linux/mount_point -o username=USER_NAME,password=PASSWORD
可以直接將 Windows 的共用資料夾掛載起來。也可以寫在 /etc/fstab 裡,一開機就自動掛載,但如果 Windows 當機或故障了,在 Linux 才可能產生連帶問題,可以透過 autofs 套件可以在用到網路芳鄰的時候,自動掛載資源到指定的資料夾,比直接寫在 /etc/fstab 裡還好。

我的 Host OS 是 WINDOWS,利用 Hyper-V 建立以 Fedora Linux 32 為 Guest OS 的虛擬機器,如果使用其他 Distro. 只有在安裝套件時會稍稍不同,設定檔的寫法則是一樣的。

  1. 安裝 autofs 和 cifs.utils套件
  2. sudo dnf install autofs cifs.utils
    
  3. 建立認證用的帳號密碼文件,我放在 /home/User_Name/.secret.txt,中間不能有空白
  4. # /home/User_Name/.secret.txt
    username=USER_NAME_in_WINDOWS
    password=PASSWORD_of_USER
    
    將 .secret.txt 的權限改成 600(rw-------)
    chmod 600 /home/User_Name/.secret.txt
    
  5. 先在 /etc/auto.master 新增一筆紀錄如下,表示要將設定檔 /etc/auto.myneighborhood (待建立)中設定的網路芳鄰資源掛載到 /mount_point,而 /mount_point 必須已存在。
  6. # /etc/auto.master
    /mount_point    /etc/auto.myneighborhood
    
  7. 接著新增 /etc/auto.myneighborhood
  8. # /etc/auto.myneighborhood
    folder_name -fstype=cifs,rw,noperm,credentials=/home/User_Name/.secret.txt,uid=User_Name,gid=User_Group,nobrl    ://xxx.xxx.xxx.xxx/share_folder
    
    credentials 後面接認證用的帳號密碼文件,避免直接將帳號、密碼寫在設定檔裡;nobrl 選項可以避免 SQLite 資料庫被鎖起來。
  9. 重新啟動 autofs 服務
  10. sudo systemctl stop autofs.service
    sudo systemctl start autofs.service
    
  11. 「使用」 /home/User_Name/mount_point/folder_name,例如進入 folder_name。
  12. cd /home/User_Name/mount_point/folder_name
    
    當「使用」到 folder_name 時 autofs 才會自動掛載,剛開始不知道,想說為什麼 start autofs.service 以後,ls -l /home/User_Name/mount_point 看不到內容,後來才知道要真的進到該目錄才會真正掛載。
  13. 參考資料:
    1. How to mount remote Windows shares
    2. Samba Client CentOS 使用 Windows 網芳磁碟設定
    3. Linux systemd 系統服務管理基礎教學與範例
    4. 將sqlite放在windows-share上跨平台使用 (提到的 nobrl 參數解決了 SQLite 資料庫被鎖的問題)