我需要在 Ubuntu 20.04 LTS 启动时自动执行格式化和安装 SSD 的任务

我需要在 Ubuntu 20.04 LTS 启动时自动执行格式化和安装 SSD 的任务

我在Google Cloud Platform中使用本地SSD,Google提供的本地SSD的特点是用户每次重启OS时都必须重新格式化并挂载它: https://cloud.google.com/compute/docs/disks/add-local-ssd#formatmultiple

我想自动执行此操作,因为每次系统重启时都必须手动执行此操作很烦人。所以我在 /etc/init.d/automountssd.sh 中创建了一个脚本

#!bin/bash
sudo mdadm --create /dev/md0 --level=0 --raid-devices=4 /dev/nvme0n1 /dev/nvme0n2 /dev/nvme0n3 /dev/nvme0n4
sudo mkfs.ext4 -F /dev/md0
sudo mount /dev/md0 /root/Downloads/

然后分配权限:chmod 775 /etc/init.d/automountssd.sh

我将其注册为自动运行:update-rc.d automountssd.sh defaults

重启后,什么也没有发生。:(

已解决:我按照 alfajorcito 的回答操作,它在 GCP 平台上完美运行。

首先我按照他的建议将 #!bin/bash 改为 #!/bin/bash。然后通过以下方式将其注册为服务:nano /etc/systemd/system/automountssd.service

[Unit]
Description=automount for GCP local ssd

[Service]
Type=oneshot
ExecStart=/etc/init.d/automountssd.sh
TimeoutStartSec=0

[Install]
WantedBy=multi-user.target

并在开机时自动启动该服务,并运行该服务:sudo systemctl enable automountssd && sudo systemctl start automountssd

现在,无论何时启动操作系统,SSD 都会自动格式化、配置和安装 Raid :)

答案1

你的shebang 缺少一个前导斜杠(即它应该是#!/bin/bash 而不是#!bin/bash) - 但除此之外,还有其他一些问题(不确定具体是什么) - 我试图用一个包含单个 echo 命令的简单 shell 脚本来重现这个问题,但它仍然不起作用......

但是,我确实设法使用 systemd 单元在重启后自动执行了脚本,所以也许你可以尝试做类似的事情?我没有 GCP 帐户,所以我不能保证这能解决你的本地 SSD 问题,但以下操作在 OCI 上的 Ubuntu 20 上有效:

# Linux version check
ubuntu@e2-micro-2:~$ uname -a
Linux e2-micro-2 5.11.0-1028-oracle #31~20.04.1-Ubuntu SMP Wed Jan 26 14:17:34 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

# script contents
ubuntu@e2-micro-2:~$ cat /etc/init.d/check-if-this-works.sh
#!/bin/bash
echo 'check' >> /tmp/checkme

# script permissions
ubuntu@e2-micro-2:~$ ls -l /etc/init.d/check-if-this-works.sh
-rwxrwxr-x 1 ubuntu ubuntu 41 Feb 19 08:26 /etc/init.d/check-if-this-works.sh

# systemd unit contents
ubuntu@e2-micro-2:~$ cat  /etc/systemd/system/checkme.service
[Unit]
Description=Check me

[Service]
Type=oneshot
ExecStart=/etc/init.d/check-if-this-works.sh
TimeoutStartSec=0

[Install]
WantedBy=multi-user.target

# confirm that output file is missing before reboot
ubuntu@e2-micro-2:~$ ls -l /tmp/checkme
ls: cannot access '/tmp/checkme': No such file or directory

# reload systemd daemon and enable service
ubuntu@e2-micro-2:~$ sudo systemctl daemon-reload
ubuntu@e2-micro-2:~$ sudo systemctl enable checkme

# reboot and check if script was successfully executed on startup
ubuntu@e2-micro-2:~$ sudo reboot
(ssh back to server)
ubuntu@e2-micro-2:~$ cat /tmp/checkme
check

相关内容