在引導時掛載 iSCSI 驅動器 - 系統停止
我在裝有 OS X 10.10 的 Mac 上的 VirtualBox VM 中執行 Oracle Linux 7(基於 CentOS / RedHat 的發行版)。我有一個 Synology Diskstation 作為 iSCSI 目標。
我已成功連接到 Synology,對磁碟進行分區並創建了文件系統。它被稱為
/dev/sdb
和分區是/dev/sdb1
。現在,我想做的是創建一個掛載點,以便我可以輕鬆訪問它:mount /dev/sdb1 /mnt/www
該命令有效。但顯然,它不會在重新啟動後持續存在。不用擔心……
/etc/fstab
我們開始吧。首先,我獲得了分區的 UUID 以確保我始終使用正確的設備:
blkid /dev/sdb1 Result: /dev/sdb1: UUID="723eb295-8fe0-409f-a75f-a26eede8904f" TYPE="ext3"
現在,我將以下行插入我的
/etc/fstab
UUID=723eb295-8fe0-409f-a75f-a26eede8904f /mnt/www ext3 defaults 0 0
重新啟動後,系統崩潰並進入維護模式。如果我刪除我插入的行,一切都會再次工作。但是,我正在逐字遵循Oracle-Base的說明
我知道我錯過了一些東西..有人能指出我正確的方向嗎?
只需通過“_netdev”更改參數“defaults”,如下所示:
UUID=723eb295-8fe0-409f-a75f-a26eede8904f /mnt/www ext3 _netdev 0 0
這樣掛載點只有在網路正確啟動後才會掛載。
介紹:
這是在引導時安裝 iSCSI 驅動器的SystemD替代方案。
在引導時掛載 iSCSI 磁碟是一個 (2) 步驟過程:
- LUN 必須由主機連接
- 然後掛載到本地文件系統上的一個點。
使用 Ubuntu 20.04 LTS 開發的腳本- 粘貼在以下答案中 這確實是一項繁瑣而乏味的工作。截至發布之日,它們可以正常工作並產生一致、正確的結果。
要將腳本直接下載到安裝 iSCSI 驅動器的主機:
git clone https://github.com/f1linux/iscsi-automount.git
請注意, Github 儲存庫中的完整腳本中有一些Debian 特定的命令
dpkg
:下面的刪節腳本是特定於發行版的,應該適用於使用 SystemD 的任何發行版。先決條件:
open-iscsi
安裝和它的配置文件/etc/iscsi/iscsid.conf
和initiatorname.iscsi
配置。iscsiadm
在執行腳本之前使用命令手動測試連接。(2) 腳本:
config-iscsi-storage.sh
:通過創建名為connect-luns.service的 SystemD 服務在啟動時自動連接 LUN 。該腳本必須首先執行。連接 LUN 後,您必須在執行下一個腳本之前對其進行下一個分區並在其上放置一個文件系統。
config-iscsi-storage-mounts.sh
: 自動將連接的分區 iSCSI 磁碟與文件系統掛載到本地文件系統上的掛載點,作為啟動時的 SystemD 掛載。腳本:
注意:我已經
echo
從腳本中刪除了’ed 回饋、說明和其他碎片,以幫助您輕鬆閱讀以評估它們的操作。
config-iscsi-storage.sh
####### SET VARIABLES ####### # Host exposing the LUNs: STORAGEIP='' # Get this value from the storage host exposing the LUN: IQNTARGET='' if [ ! -d /root/scripts ]; then mkdir /root/scripts fi if [ ! -f /root/scripts/connect-luns.sh ]; then cat <<EOF> /root/scripts/connect-luns.sh #!/bin/bash # Use of "sendtargets" necessary to wake up the Synology Storage Host: iscsiadm -m discovery -t sendtargets -p $STORAGEIP # The iscsiadm command to CONNECT the LUN lives in this file iscsiadm -m node -T $IQNTARGET -p $STORAGEIP:3260 --login EOF chmod 700 /root/scripts/connect-luns.sh chown root:root /root/scripts/connect-luns.sh else echo "iscsiadm -m node -T $IQNTARGET -p $STORAGEIP:3260 --login" >> /root/scripts/connect-luns.sh fi if [ ! -f /root/scripts/disconnect-luns.sh ]; then cat <<EOF> /root/scripts/disconnect-luns.sh #!/bin/bash # The iscsiadm command to DISCONNECT the LUN lives in this file iscsiadm -m node -T $IQNTARGET -p $STORAGEIP:3260, 1 -u EOF chmod 700 /root/scripts/disconnect-luns.sh chown root:root /root/scripts/disconnect-luns.sh else echo "iscsiadm -m node -T $IQNTARGET -p $STORAGEIP:3260, 1 -u" >> /root/scripts/disconnect-luns.sh fi if [ ! -f /etc/systemd/system/connect-luns.service ]; then cat <<EOF> /etc/systemd/system/connect-luns.service [Unit] Description=Connect iSCSI LUN Documentation=https://github.com/f1linux/iscsi-automount Requires=network-online.target DefaultDependencies=no [Service] User=root Group=root Type=oneshot RemainAfterExit=true ExecStart=/root/scripts/connect-luns.sh "Connecting LUN" StandardOutput=journal [Install] WantedBy=multi-user.target EOF chmod 644 /etc/systemd/system/connect-luns.service systemctl daemon-reload systemctl enable connect-luns.service systemctl start connect-luns.service fi iscsiadm -m discovery -t sendtargets -p $STORAGEIP fdisk -l echo echo "$(tput setaf 5)####### NEXT STEPS: #######$(tput sgr 0)" echo echo 'STEP 1: Find the iSCSCI disk in the output above and then partition it,' echo ' ie: fdisk /dev/sdX where "X" is the letter of the iSCSI disk' echo echo 'STEP 2: Format the iSCSI disk with a filesystem' echo ' ie: mkfs.ext4 /dev/sdX1 where the iSCSI disk is /dev/sdX' echo echo 'STEP 3: Execute script config-iscsi-storage-mounts.sh to configure auto-mounting the iSCSI disk' echo ' to configure mounting the newly formatted iSCSI disks on boot' echo
config-iscsi-storage-mounts.sh
####### SET VARIABLES ####### # Use 'fdisk -l' to identify the iSCSI disk ISCSIDEVICE='sda1' # The script will create the folder with the name supplied in "ISCSIDISKMOUNTFOLDER" variable # in the path /mnt. Therefore do NOT manually create the folder the LUN is mounted to. # # NAMING REQUIREMENTS: Do NOT specify a folder name with a hypen in folder name that the LUN will be mounted on. # This will cause the SystemD mount to fail. # ie: "logsproxy" is a valid name and WILL work but "logs-proxy" will NOT and cause the mount to fail. # ISCSIDISKMOUNTFOLDER='logs' # Filesystem type the LUN was formatted for which is supplied in the 'Type' field below FILESYSTEM='ext4' # SystemD mount file comment: # Below variable sets "Description" field in the file that starts the mount. MOUNTDESCRIPTION='Persistent Data living on iSCSI LUN' ## NOTE: Most settings below show work out of the box if [ ! -d /mnt/$ISCSIDISKMOUNTFOLDER ]; then mkdir /mnt/$ISCSIDISKMOUNTFOLDER chmod 770 /mnt/$ISCSIDISKMOUNTFOLDER fi if [ ! -f /etc/systemd/system/mnt-$ISCSIDISKMOUNTFOLDER.mount ]; then cat <<EOF> /etc/systemd/system/mnt-$ISCSIDISKMOUNTFOLDER.mount [Unit] Description=$MOUNTDESCRIPTION After=connect-luns.service DefaultDependencies=no [Mount] What=/dev/disk/by-uuid/$(ls -al /dev/disk/by-uuid | grep $ISCSIDEVICE | awk '{print $9}') Where=/mnt/$ISCSIDISKMOUNTFOLDER Type=$FILESYSTEM StandardOutput=journal [Install] WantedBy=multi-user.target EOF chown root:root /etc/systemd/system/mnt-$ISCSIDISKMOUNTFOLDER.mount chmod 644 /etc/systemd/system/mnt-$ISCSIDISKMOUNTFOLDER.mount systemctl daemon-reload systemctl enable mnt-$ISCSIDISKMOUNTFOLDER.mount sudo systemctl start mnt-$ISCSIDISKMOUNTFOLDER.mount else echo "'/etc/systemd/system/mnt-$ISCSIDISKMOUNTFOLDER.mount' already exists" fi echo echo "$(tput setaf 5)####### NEXT STEPS: #######$(tput sgr 0)" echo echo 'Reboot and verify that the iscsi disk automatically mounted on boot using the "mount" command' echo
結論:
如您所見,連接 iSCSI 磁碟是一項繁瑣的工作。希望這可以為您節省一些繁重的工作-