Ubuntu 18.04では、起動時にfstabからネットワーク共有を自動的にマウントする機能が失われました。コンピューターを起動するたびに、すべての共有をSudo mount -a
で手動でマウントする必要があります...すでにcrontabに@reboot mount -aを含めようとしましたが、機能しません... Ubuntuで発生しましたMATE 18.04およびKubuntu 18.04なので、デスクトップの問題ではなく、コアUbuntuの問題のようです...
乾杯ブルーノ
Ubuntu 18.04LTSで同じ問題を解決するためにこれらのオプションを試しました。
#!/bin/sh mount -a
問題が解決しました!最後の解決策はうまくいきます。 /etc/network/if-up.d/にあるスクリプトは、ネットワーク接続が確立された後に実行されます。このスクリプトは、/ etc/fstabで既に規定されているネットワーク共有(およびその他の保留中のマウント)をマウントします。
私は同じ問題を抱えており、 autofs および起動コマンドなどを使用してみましたが、結果は満足のいくものではありませんでした。 Autostart script として追加する独自のスクリプトを書くことで、ようやく解決しました。このスクリプトにはpythonが必要であり、ユーザーは少なくともmount
コマンドに対してSudo特権(パスワードなし)を持っている必要があります。
Pythonスクリプト(main.py)は次のとおりです。
"""
Code to do a user level mounts/unmounts
Usage:
python3 main.py mount|unmount
The mounts list contains the information needed to perform the mount and unmount.
These mounts should not appear in the /etc/fstab file.
each element of the mounts list is itself a list in the format:
[device, mount_dir, mount_options, ...]
where `device` is the device to be mounted such as '//192.168.1.3/Public'
'mount_dir' is the mount point
'mount_options' is the options to be used by the mount command.
Each option must be an element itself.
for example: '-t', 'cifs', '-o', 'rw,users,noperm,guest,soft,cache=none,sec=none'
Edit the `mounts` list to your needs.
The mount command issued will be 'Sudo mount <mount_options> <device> <mount_dir>`.
The unmount command will be `Sudo umount <mount_dir>`.
This requires that the user be in the `sudoers` group with the
"NOPASSWD" argument, for example:
jra ALL=(ALL) NOPASSWD: ALL
gives user `jra` the ability to use the `Sudo` command without ever
providing a password. (This can be modified to limit
the commands allowed without a password).
Upon start of this script, attempts will be made to mount each element
in the mounts list.
Failed mounts are added to the `waiting_mounts` list, and mounts for
those failures are retried after delays specified in 'SLEEP_SECONDS' list.
Unmounting is performed by the OS, normally not by this script.
A log directory `.simpleAutomount` is created in the users home directory.
"""
import subprocess
import time
import sys
from datetime import datetime
import os.path
import shutil
# this is the list of mounts to be performed (list of lists)
mounts=[
['//192.168.1.3/Public', '/mnt/mybook', '-t', 'cifs', '-o', 'rw,_netdev,users,noperm,guest,soft,cache=none,sec=none,vers=1.0' ],
# ['/dev/sda4', '/windows', '-t', 'ntfs']
]
SLEEP_SECONDS = [5, 5, 5, 10, 20, 100, 100] # number of seconds to sleep between successive mount attempts
MAX_TRIES = len(SLEEP_SECONDS)
waiting_mounts = []
def ping(Host):
"""
ping the specified Host and return the exit value of the ping
success == 0 means success
success == 1 means no reply received
success == 2 means no network available
"""
cmd = ['ping', Host, '-c 1']
success = subprocess.call(cmd, stdout=subprocess.PIPE)
return success
def process_mount(mnt):
"""
attempt to perform one mount as indicated in the mnt list
:param mnt: one element from the mounts list (which is a list in itself)
:return: True if the mount was successful (or the mount should not be attempted again). False if the mount should be tried again later
"""
Host = None
if mnt[0].startswith('//'): # format is //Host/directory
index = mnt[0].index('/', 2)
Host = mnt[0][2:index]
Elif ':' in mnt[0]: # format is Host:directory
index = mnt[0].index(':')
Host = mnt[0][:index]
mnt_cmd = ['Sudo', 'mount']
mnt_cmd.extend(mnt[2:])
mnt_cmd.extend(mnt[0:2])
if Host is None: # this is not a network mount, do not need to ping
logFile.write('running ' + str(mnt_cmd) + '\n')
logFile.flush()
returnCode = subprocess.call(mnt_cmd)
logFile.write('\t' + str(mnt_cmd) + ' finished with return code: ' + str(returnCode) + '\n')
logFile.flush()
return True
Elif ping(Host) == 0:
logFile.write('running ' + str(mnt_cmd) + '\n')
logFile.flush()
returnCode = subprocess.call(mnt_cmd)
logFile.write('\t' + str(mnt_cmd) + ' finished with return code: ' + str(returnCode) + '\n')
logFile.flush()
return True
else:
return False
def usage(unrecognized_opt=None):
if unrecognized_opt is not None:
print('Unrecognized option: ' + str(unrecognized_opt) + '\n')
logFile.write('Unrecognized option: ' + str(unrecognized_opt) + '\n')
print('usage:\n\tpython3 ' + sys.argv[0] + ' mount|unmount\n')
logFile.write('usage:\n\tpython3 ' + sys.argv[0] + ' mount|unmount\n')
logFile.flush()
if __name__ == '__main__':
"""
The starting point for the SimpleAutomount script
Legal arguments are 'mount' or 'unmount'
'mount' will inspect each element of the mounts list and attempt the mounts
'unmount' will attempt to unmount each element of the mount list
"""
if len(sys.argv) != 2:
usage()
sys.exit(1)
theDate = datetime.now()
# create a log file in the users ~/.simpleAutomount directory
home = os.path.expanduser("~")
sam = os.path.join(home, '.simpleAutomount')
if not os.path.exists(sam):
os.mkdir(sam, 0o755)
logFileName = os.path.join(sam, "simpleAutomount.log")
logFile = open(logFileName, 'a')
# start logging
logFile.write('\n\nSimpleAutomount started at ' + str(theDate) + ' with arg: ' + sys.argv[1] + '\n')
logFile.flush()
if sys.argv[1].lower() == 'mount': # do mount
os.spawnlp(os.P_NOWAIT, sys.executable, sys.executable, sys.argv[0], 'forked_mount') # fork so that systemd does not wait and delay login
sys.exit(0) # indicate success
Elif sys.argv[1].lower() == 'forked_mount': # we are forked, so we can take our time here
for mnt in mounts:
if not process_mount(mnt): # the mount was not successful and should be tried again later
logFile.write('appending ' + mnt[0] + ' to waiting mounts\n')
logFile.flush()
waiting_mounts.append((mnt)) # add this mount to the waiting_mounts list to be tried again later
# if any mounts were unsuccessful and should be tried again, loop to try mounting again
try_count = 0
while len(waiting_mounts) > 0 and try_count < MAX_TRIES:
logFile.write('sleeping for ' + str(SLEEP_SECONDS[try_count]) + ' seconds\n')
logFile.flush()
time.sleep(SLEEP_SECONDS[try_count])
# process waiting_mounts, starting at the end for ease of deletion
indx = len(waiting_mounts) - 1
for i in range(indx, -1, -1):
mnt = waiting_mounts[i]
logFile.write('Attempting to mount ' + mnt[0] + ' for try number ' + str(try_count) + '\n')
logFile.flush()
# try this mount again
if process_mount(mnt):
del waiting_mounts[i] # mount was successful, so remove this entry from waiting mounts
try_count += 1
logFile.write('SimpleAutomount exiting with ' + str(len(waiting_mounts)) + ' remaining unmounted\n')
Elif sys.argv[1].lower() == 'unmount': # do unmount
for mnt in mounts:
cmd = ['Sudo', 'umount', mnt[1]]
#journal.send('running ' + str(cmd), SYSLOG_IDENTIFIER='simple_automount', SYSLOG_PID=str(os.getpid()))
logFile.write('running ' + str(cmd) + '\n')
logFile.flush()
returnCode = subprocess.call(cmd)
logFile.write('\t' + str(cmd) + ' finished with return code: ' + str(returnCode) + '\n')
logFile.flush()
sys.exit(0)
else:
usage(unrecognized_opt=sys.argv[1])
sys.exit(1)
Ubuntu 18.04では、ハードディスクの割り当てが変更されました。 Ubuntu 16.04で使用した/ dev/sda3デバイスは、Ubuntu 18.04の/ dev/sde3に移動しました。
Fstabエントリを変更する前に、重大なエラーで起動が停止します。
適切なデバイス割り当てを見つけた後、システムは起動を続け、fstabで割り当てたすべてのパーティションをマウントします。
可能な割り当てを取得するには、次のコマンドを試してください。
Sudo fdisk -l
宜しくお願いします