Windows コンピューターからすべての共有をマウントするスクリプトがあります。基本的には次のようになります。
mount.cifs //192.168.0.7/pictures ~/otherpc/pictures -o user=me,domain=mynetwork,password=12345,vers=3.0
約10行です。
問題は、私のネットワークが DHCP であることです。そのため、このスクリプトで IP を時々変更する必要があります。
スクリプトは次のように動作していました:
mount.cifs //OTHERPC/pictures ~/otherpc/pictures -o user=me,domain=mynetwork,password=12345,ver=3.0
しかし、ある時点でエラーが発生し始めました:
mount error: could not resolve address for OTHERPC: Unknown error
ただし、Nautilus は問題なく名前を解決します。
IP を解決し、それを変数に保存し、スクリプト内で直接 IP を使用する代わりに、//$variable で mount.cifs を使用する方法はありますか?
ありがとう
答え1
Ubuntu 18.04.1 LTSにアップグレードした後、まったく同じ問題が発生しましたdo-release-upgrade
。以前は問題なくマウントされていた共有がすべてこの醜い
mount error: could not resolve address for server.domain.local: Unknown error
nslookup
正しく解決され、syslog
何strace
も表示されませんでした。
結局、問題は.local
ドメインと、 DNS ルックアップの前に/etc/nsswitch.conf
mDNS Avahi/Bonjour デーモンを配置する変更 (おそらくリリース アップグレード中) でしたmdns4_minimal
。
それで、注文を変更したら問題は解決しました
hosts: files mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] dns
に
hosts: files dns mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return]
役に立つリンクをすべて覚えているわけではありませんが、これは確かに役に立ちました:https://askubuntu.com/a/853284/810573
答え2
IP を変数に保存する前に試すべきオプションが 2 つあります。(さらに、サーバーにすでにホスト名がない限り、新しい IP をどうやって見つけるのでしょうか?)
動的 IP の場合は、IP ではなくホスト名を使用してマウントしてみてください。
mount.cifs //cifs.server.com/pictures ~/otherpc/pictures -o user=me,domain=mynetwork,password=12345,vers=3.0
- ネットワークが自分の管理下にある場合は、CIFS サーバーの IP に対して DHCP 予約を行います。
答え3
IPを取得するにはnmblookup NAME | head -n 1 | cut -d ' ' -f 1
それを変数に入れNAME_IP
てNAME_IP="$(nmblookup NAME | head -n 1 | cut -d ' ' -f 1)"