Я использую персистентный живой USB под управлением Ubuntu 18.04.3 LTS Бионический Бобр, поскольку разделение моего жесткого диска является очень трудным. Играя в Паровые игры, мне нужен своп-файл. Со справкой от @malte-skoruppa, я теперь использую своп-файл на разделе NTFS на внутреннем жестком диске.
Я теперь хотел бы автоматизировать процесс с помощью своего первого сценария Bash, на основе ПРАКТИЧЕСКОГО РУКОВОДСТВА. Можно ли видеть какие-либо дефекты в этом сценарии?:
#!/bin/bash
echo "Mounting partition..."
sudo mount -U 80EA3F58EA3F49A4 /media/ubuntu/LENOVO
echo "Opening swapfile..."
sudo swapon /media/ubuntu/LENOVO/swapfile.img
steam steam://open/minigameslist
echo "Closing swapfile..."
sudo swapoff /media/ubuntu/LENOVO/swapfile.img
echo "Unmounting partition..."
sudo umount -l /media/ubuntu/LENOVO
echo "Mission accomplished!"
Я особенно обеспокоен umount -l
опция. В ПРАКТИЧЕСКОМ РУКОВОДСТВЕ говорится, что оно размонтирует раздел, после того как это не занято, но в старом ответе Переполнения стека говорится, что это размонтирования силы раздел, который НЕ является тем, что я хочу сделать.
Так как я знаю, что Вы плохо знакомы с Ubuntu, вот несколько замечаний общего порядка.
1. Помещенный, что раздел в Вашем /etc/fstab
Прежде всего, в Вашем сценарии Вы используете строку sudo mount -U 80EA3F58EA3F49A4 /media/ubuntu/LENOVO
для монтирования раздела NTFS. Я предложил бы добавить, что раздел к Вашему /etc/fstab
и отображает его на UID Вашего раздела там. Так как Вы находитесь в однопользовательской системе, можно хотеть иметь запись, подобную этому в Вашем /etc/fstab
:
UUID=80EA3F58EA3F49A4 /media/ubuntu/LENOVO ntfs rw,exec,uid=1000,gid=1000,umask=0002,nls=utf8,noauto 0 0
Самое главное, это говорит системе связывать точку монтирования /media/ubuntu/LENOVO
с UID 80EA3F58EA3F49A4
. Тот путь, в будущем (и таким образом в Вашем сценарии) можно просто использовать sudo mount /media/ubuntu/LENOVO
вместо sudo mount -U 80EA3F58EA3F49A4 /media/ubuntu/LENOVO
. Если UID изменяется в будущем (потому что Вы переформатировали раздел), лучше иметь только одно центральное место, /etc/fstab
, отредактировать, а не 20 сценариев, у Вас может быть ложь вокруг.
Это также монтирует файловую систему с различными общими опциями для разделов NTFS: режим чтения-записи (rw
), разрешите выполнение двоичных файлов (exec
), сделайте все файлы, и каталоги в файловой системе принадлежат пользователю 1000 и группа 1000 (uid=1000,gid=1000
) (это - Ваш обычный пользователь), установите биты полномочий для всех файлов и каталогов к 775 (umask=0002
), установите набор символов для имен файлов к UTF-8 (nls=utf8
) и не монтируйте раздел автоматически (noauto
). Обратитесь к [1 132], fstab (5) и монтируются (8) для получения дополнительной информации. Я лично нахожу удобным в моей однопользовательской системе смочь получить доступ ко всем файлам на моих разделах NTFS, не имея необходимость использовать sudo
, но конечно Ваш пробег может варьироваться.
можно также хотеть отбросить noauto
опция. Затем раздел будет смонтирован каждый раз, когда команда mount -a
выполняется, и, в частности, во время начальной загрузки (и таким образом, это обычно монтировалось бы все время). Затем Вы не должны были бы даже использовать mount
и umount
команды в Вашем сценарии вообще, но я не знаю, хотите ли Вы это.
2. Не используйте umount
с [1 123]
От [1 134] umount (8) :
рекомендуемый пример использования для umount-l должен предотвратить, зависает на завершении работы из-за недостижимого сетевого ресурса, где нормальный umount зависнет из-за побежденного сервера или разделения сети.
, Таким образом, эта опция по крайней мере довольно необычна для использования в случае.
, Работаете ли Вы umount
с или без [1 125], раздел не будет размонтирован силой (существует -f
опция для этого). Скорее когда Вы не используете -l
, и раздел все еще занят, размонтирование просто приведет к сбою и возвратит сообщение об ошибке; когда использование -l
и раздел все еще занято, это будет отсоединено от файловой системы hiearchy теперь (значение, что Вы не можете больше получать доступ к нему), но незаконченные операции ввода-вывода будут тихо завершены в фоновом режиме.
С тех пор не должно быть никаких незаконченных операций ввода-вывода после выполнения swapoff
не используя -l
Вы, по крайней мере, заметили бы, нечетно ли что-то, потому что, если бы раздел неожиданно тих занятый затем, команда размонтирования произвела бы сообщение об ошибке.
3. Добавьте обработку ошибок
, Вы выполняете все команды в последовательности, но не проверяете, работала ли предыдущая команда. Так, например, если монтирующиеся сбои, то эти swapon
команда будет, тем не менее, предпринята, но сбой и затем Ваша игра запустятся даже при том, что подкачка не была активирована.
Попытка это:
#!/bin/bash
echo "Mounting partition..."
sudo mount /media/ubuntu/LENOVO
if [ $? -ne 0 ]; then
echo "Could not mount partition, mission aborted." >&2
exit 1
fi
echo "Opening swapfile..."
sudo swapon /media/ubuntu/LENOVO/swapfile.img
if [ $? -ne 0 ]; then
echo "Could not activate swap, mission aborted." >&2
exit 1
fi
steam steam://open/minigameslist
echo "Closing swapfile..."
sudo swapoff /media/ubuntu/LENOVO/swapfile.img
echo "Unmounting partition..."
sudo umount /media/ubuntu/LENOVO
echo "Mission accomplished!"