我正在运行 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 库
我知道我错过了一些东西......有人能指出我正确的方向吗?
答案1
只需将参数“defaults”更改为“_netdev”,如下所示:
UUID=723eb295-8fe0-409f-a75f-a26eede8904f /mnt/www ext3 _netdev 0 0
这样只有在网络正确启动后才会挂载挂载点。
答案2
介绍:
这是一个系统D启动时安装 iSCSI 驱动器的替代方案。
在启动时安装 iSCSI 磁盘需要 (2) 个步骤:
LUN 必须由主机连接
然后安装到本地文件系统上的某个点。
脚本-使用 Ubuntu 20.04 LTS 开发- 粘贴在下面的答案中,我可以为其他人节省配置 iSCI 安装的麻烦工作;这确实是一件繁琐、乏味的事情。截至本文发布之日,它们可以正常工作并产生一致、正确的结果。
要将脚本直接下载到安装 iSCSI 驱动器的主机:
git clone https://github.com/f1linux/iscsi-automount.git
请注意,有一些Debian 特定命令在 Github 存储库的完整脚本中dpkg
:下面的删节脚本是针对特定发行版的,应该适用于任何使用 SystemD 的发行版。
先决条件:
open-iscsi
安装及其配置文件/etc/iscsi/iscsid.conf
和initiatorname.iscsi
配置。iscsiadm
在运行脚本之前使用命令手动测试连接。
(2) 脚本:
config-iscsi-storage.sh
:通过创建名为 SystemD 的服务,在启动时自动连接 LUN连接luns.service。该脚本必须执行第一的。连接 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 磁盘是一项繁琐的工作。希望这可以为您节省一些繁重的工作 -