linux裸设备原理和配置

基本概念

1、什么裸设备?字符设备?块设备?

裸设备:也叫裸分区(原始分区),是一种没有经过格式化,不被Unix/Linux通过文件系统来读取的特殊字符设备。它由应用程序负责对它进行读写操作。不经过文件系统的缓冲。裸设备可以绑定一个分区,也可以绑定一个磁盘。
字符设备:对字符设备的读写不需要通过OS的buffer。它不可被文件系统mount。
块设备:对块设备的读写需要通过OS的buffer,它可以被mount到文件系统中。
裸设备是指通过字符方式访问的设备,这种设备在读写数据时不需要缓冲区,在Linux环境下默认不提供裸设备服务,必须手工配置裸设备服务,同时需要修改裸设备访问的权限。

2、在oracle中使用裸设备的好处是什么?

因为使用裸设备避免了在经过unix操作系统这一层,数据直接从disk到oracle之间进行无缝传输,所以使用裸设备对于读写频繁的数据库应用来说,可以极大的提高数据库系统的性能,当然,这是以磁盘的I/O非常大,磁盘I/O已经成为系统瓶颈的情况下才能力的,如果磁盘读写确实非常频繁,以至于磁盘读写成为系统瓶颈的情况成立,那么采用裸设备确实可以大大提高性能,最大甚至可以提高至40%,非常明显。而且,由于使用了原始分区,没有采用文件系统的管理方式,对unix维护文件系统的开销也都没有了。比如不在需要维护i-node,空闲块等等,这也能够导致性能的提高。

3、一个系统可以有多少个裸设备?

这个与linux的版本相关,在旧版本中,最多只可以有256个裸设备,Linux 4下做多可以绑定8192个裸设备。
但是在linux下,最多只能有255个分区,所以,如果用裸设备绑定分区,最多只能绑定255个裸设备。
如果是用lvm,则没有这个限制。

4、Linux下单个磁盘最多可以有多少个分区?

15个。3个主分区 + 1个扩展分区 + 11个逻辑分区。
建议的分区方法是:先分3个主分区,第四个分区为扩展分区,然后在扩展分区中再分成11个逻辑分区。
注意,裸设备不要绑定在扩展分区上。

5、linux如何绑定裸设备?

两种方式:
1)命令绑定,临时生效
raw /dev/raw/raw[n] /dev/xxx
其中n的范围是0-8191。raw目录不存在的话会被自动创建。
执行这个命令,就会在/dev/raw下生成一个对应的raw[n]文件
用命令方式绑定裸设备在系统重启后会失效。

手动绑定:

执行绑定
[root@localhost ~]# raw /dev/raw/raw1 /dev/sdb1
/dev/raw/raw1:  bound to major 8, minor 17

解除绑定:
 [root@localhost ~]# raw /dev/raw/raw1 0 0

查看绑定信息:
raw -aq

ls -alt /dev/raw

2)修改配置文件,永久生效(Centos 7一下的版本)
修改/etc/udev/rules.d/60-raw.rules文件如下,以开机时自动加载裸设备

[root@rrac1 ~]# cat /etc/udev/rules.d/60-raw.rules
# Enter raw device bindings here.
#
# An example would be:
#   ACTION=="add", KERNEL=="sda", RUN+="/bin/raw /dev/raw/raw1 %N"
# to bind /dev/raw/raw1 to /dev/sda, or
#   ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="1", RUN+="/bin/raw /dev/raw/raw2 %M %m"
# to bind /dev/raw/raw2 to the device with major 8, minor 1.
ACTION=="add", ENV{MAJOR}=="252", ENV{MINOR}=="17", RUN+="/bin/raw /dev/raw/raw1 %M %m"
ACTION=="add", ENV{MAJOR}=="252", ENV{MINOR}=="18", RUN+="/bin/raw /dev/raw/raw2 %M %m"
ACTION=="add", ENV{MAJOR}=="252", ENV{MINOR}=="21", RUN+="/bin/raw /dev/raw/raw3 %M %m"
ACTION=="add", ENV{MAJOR}=="252", ENV{MINOR}=="22", RUN+="/bin/raw /dev/raw/raw4 %M %m"
ACTION=="add", ENV{MAJOR}=="252", ENV{MINOR}=="23", RUN+="/bin/raw /dev/raw/raw5 %M %m"
ACTION=="add", ENV{MAJOR}=="252", ENV{MINOR}=="24", RUN+="/bin/raw /dev/raw/raw6 %M %m"
 
ACTION=="add", KERNEL=="raw1", OWNER="grid", GROUP="asmadmin", MODE="660"
ACTION=="add", KERNEL=="raw2", OWNER="grid", GROUP="asmadmin", MODE="660"
ACTION=="add", KERNEL=="raw3", OWNER="grid", GROUP="asmadmin", MODE="660"
ACTION=="add", KERNEL=="raw4", OWNER="grid", GROUP="asmadmin", MODE="660"
ACTION=="add", KERNEL=="raw5", OWNER="grid", GROUP="asmadmin", MODE="660"
ACTION=="add", KERNEL=="raw6", OWNER="grid", GROUP="asmadmin", MODE="660"

3)启动raw设备

start_udev 
Starting udev:                                             [  OK  ]

centos 7及以上版本:
inux 7.x 中已经没有start_udev命令,在配置完UDEV 后,需要执行:

[dave@www.cndba.cn ~]# /sbin/udevadm trigger --type=devices --action=change
或者:
[dave@www.cndba.cn ~]# /sbin/udevadm control --reload
[dave@www.cndba.cn rules.d]# ll /dev/raw*
brw-rw---- 1 grid asmadmin 8, 16 Mar 21 22:01 /dev/asmdiskb
brw-rw---- 1 grid asmadmin 8, 32 Mar 21 22:01 /dev/asmdiskc
brw-rw---- 1 grid asmadmin 8, 48 Mar 21 22:01 /dev/asmdiskd
brw-rw---- 1 grid asmadmin 8, 64 Mar 21 22:01 /dev/asmdiske
brw-rw---- 1 grid asmadmin 8, 80 Mar 21 22:01 /dev/asmdiskf

systemctl restart systemd-udev-trigger.service

rqw -qa命令列出当前已绑定的所有裸设备。

这种方式是通过启动服务的方式来绑定裸设备。当然也可以把这个命令写在/etc/rc.local上,使每次启动都执行这些命令。

6、如何把裸设备作为oracle数据文件?有什么需要注意的?

改变裸设备属主,把命令写入/etc/rc.local

这个的意思是修改裸设备的默认属主为oracle:dba,默认的mode是0660。

如果是用lvm,也需要把逻辑卷绑定到裸设备上,过程和绑定到普通分区类似。

7、使用裸设备作为oracle数据文件有什么需要注意的?
使用裸设备作为oracle的数据文件必须注意以下几点:
1)一个裸设备只能放置一个数据文件
2)数据文件的大小不能超过裸设备的大小
如果是日志文件,则裸设备最大可用大小=裸设备对应分区大小 - 1 * 512 (保留一个redo lock)
如果是数据文件,则裸设备最大可用大小=裸设备对应分区大小 - 2 * db_block_size(保留两个block)
为了简单起见,对所有的文件设置称比裸设备小1M即可。
3)数据文件最好不要设置称自动扩展,如果设置称自动扩展,一定要把maxsize设置设置为比裸设备小

8、是否可以直接用逻辑卷作为oracle数据文件?
linux下oracle不能直接把逻辑卷作为裸设备,也要进行绑定。unix下就不需要。

9、如何知道某个裸设备的大小
比较笨的办法是,找出看裸设备对应的是那个实际的块设备,然后用fdisk -l /dev/[h,s]dXN看那个块设备的大小就好了。
比较简单的办法是用blockdev命令来计算,如:

blockdev --getsize /dev/raw/raw1

11718750
11718750表示有多少OS BLIOCK。
一般一个OS BLOCK大小是512字节,所以11718750*512/1024/1024/1024 = 5722(m) 就是裸设备的大小。

10、数据库中可以同时以文件和裸设备作为数据文件吗?
可以。甚至在同一个表空间中,也可以部分数据文件用文件系统,部分文件用裸设备。
但是不建议这样做,因为会增加管理的复杂度。

11、可以把至于裸设备的数据文件设成自动扩展吗?
可以,但同时要设置maxsize,且maxsize不能超过:裸设备大小 - 2*db_block_size

12、如何取消裸设备的绑定
用raw把major and minor设成0就可以取消裸设备的绑定。如:
raw /dev/raw/raw1 0 0
这个命令取消绑定裸设备的绑定,/dev/raw/raw1会被删除

13、裸设备可以绑定的对象可以什么?
可以绑定整个没有分区的硬盘、可以绑定硬盘的某个分区、可以绑定逻辑卷等。

14、清空裸设备
相当于格式化啦bs是快的大小,block size
count是快的数量,这两者相乘大于裸设备的容量即可
dd if=/dev/zero of=/dev/raw/raw4 bs=8192 count=128000
dd if=/dev/zero of=/dev/raw/raw4 bs=8192 count=128000

绑定裸设备

centos 6及以下版本绑定裸设备

方法一、配置udev(lsscsi绑定磁盘ID的方式)

echo "options=--whitelisted --replace-whitespace" >> /etc/scsi_id.config

for i in b c d e
do
echo "KERNEL==\"sd*\", BUS==\"scsi\", PROGRAM==\"/sbin/scsi_id --whitelisted --replace-whitespace --
device=/dev/\$name\", RESULT==\"`/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/sd$i`\",
NAME=\"asm-disk$i\", OWNER=\"grid\", GROUP=\"asmadmin\", MODE=\"0660\""
done

将以上脚本输出的内容写入 /etc/udev/rules.d/99-oracle-asmdevices.rules文件 ,如果/etc/udev/rules.d目录下已存在99开头的规则文件,需先将其改为其
他数字开头

vim /etc/udev/rules.d/99-oracle-asmdevices.rules

cat /etc/udev/rules.d/99-oracle-asmdevices.rules
KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="360003ff44dc75adc9c722970d3da17b6",NAME="asm-diskb", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="360003ff44dc75adc81e583cc9a98a4e9",NAME="asm-diskc", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="360003ff44dc75adcbe42850beacee517",NAME="asm-diskd", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="360003ff44dc75adcb145661c7f58f967",NAME="asm-diske", OWNER="grid", GROUP="asmadmin", MODE="0660"

启动并验证udev

/sbin/start_udev

[root@rac1 ~]# ll /dev/asm*
brw-rw---- 1 grid asmadmin 8, 16 11月 24 19:33 /dev/asm-diskb
brw-rw---- 1 grid asmadmin 8, 32 11月 24 19:33 /dev/asm-diskc
brw-rw---- 1 grid asmadmin 8, 48 11月 24 19:33 /dev/asm-diskd
brw-rw---- 1 grid asmadmin 8, 64 11月 24 19:33 /dev/asm-diske

这里需要注意的是配置的,前后都不能有空格,否则会报错。最后看到的raw盘权限必须是grid:asmadmin用户。

方法二、udev方式

vim /etc/udev/rules.d/60-raw.rules
查找到对应的major 和minor绑定

[root@rrac1 ~]# cat /etc/udev/rules.d/60-raw.rules
# Enter raw device bindings here.
#
# An example would be:
#   ACTION=="add", KERNEL=="sda", RUN+="/bin/raw /dev/raw/raw1 %N"
# to bind /dev/raw/raw1 to /dev/sda, or
#   ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="1", RUN+="/bin/raw /dev/raw/raw2 %M %m"
# to bind /dev/raw/raw2 to the device with major 8, minor 1.
ACTION=="add", ENV{MAJOR}=="252", ENV{MINOR}=="17", RUN+="/bin/raw /dev/raw/raw1 %M %m"
ACTION=="add", ENV{MAJOR}=="252", ENV{MINOR}=="18", RUN+="/bin/raw /dev/raw/raw2 %M %m"
ACTION=="add", ENV{MAJOR}=="252", ENV{MINOR}=="21", RUN+="/bin/raw /dev/raw/raw3 %M %m"
ACTION=="add", ENV{MAJOR}=="252", ENV{MINOR}=="22", RUN+="/bin/raw /dev/raw/raw4 %M %m"
ACTION=="add", ENV{MAJOR}=="252", ENV{MINOR}=="23", RUN+="/bin/raw /dev/raw/raw5 %M %m"
ACTION=="add", ENV{MAJOR}=="252", ENV{MINOR}=="24", RUN+="/bin/raw /dev/raw/raw6 %M %m"
 
ACTION=="add", KERNEL=="raw1", OWNER="grid", GROUP="asmadmin", MODE="660"
ACTION=="add", KERNEL=="raw2", OWNER="grid", GROUP="asmadmin", MODE="660"
ACTION=="add", KERNEL=="raw3", OWNER="grid", GROUP="asmadmin", MODE="660"
ACTION=="add", KERNEL=="raw4", OWNER="grid", GROUP="asmadmin", MODE="660"
ACTION=="add", KERNEL=="raw5", OWNER="grid", GROUP="asmadmin", MODE="660"
ACTION=="add", KERNEL=="raw6", OWNER="grid", GROUP="asmadmin", MODE="660"


或者
ACTION=="add", KERNEL=="/dev/sdb",RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", ENV{MAJOR}=="8",ENV{MINOR}=="16",RUN+="/bin/raw /dev/raw/raw1 %M %m"
ACTION=="add", KERNEL=="/dev/sdc",RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add", ENV{MAJOR}=="8",ENV{MINOR}=="32",RUN+="/bin/raw /dev/raw/raw2 %M %m"
ACTION=="add", KERNEL=="/dev/sdd",RUN+="/bin/raw /dev/raw/raw3 %N"
ACTION=="add", ENV{MAJOR}=="8",ENV{MINOR}=="48",RUN+="/bin/raw /dev/raw/raw3 %M %m"

或者直接通过KERNEL 指定设备名绑定

[root@cdn3 rules.d]# vi 60-raw.rules
# Enter raw device bindings here.
#
# An example would be:
# ACTION=="add", KERNEL=="sda", RUN+="/bin/raw /dev/raw/raw1 %N"
# to bind /dev/raw/raw1 to /dev/sda, or
# ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="1", RUN+="/bin/raw /dev/raw/raw2 %M %m"
# to bind /dev/raw/raw2 to the device with major 8, minor 1.

ACTION=="add",KERNEL=="sdc1",RUN+="/bin/raw /dev/raw/raw1 %N" 
ACTION=="add",KERNEL=="sdd1",RUN+="/bin/raw /dev/raw/raw2 %N" 
ACTION=="add",KERNEL=="sde1",RUN+="/bin/raw /dev/raw/raw3 %N" 
ACTION=="add",KERNEL=="sdf1",RUN+="/bin/raw /dev/raw/raw4 %N" 
ACTION=="add",KERNEL=="sdf2",RUN+="/bin/raw /dev/raw/raw5 %N" 
ACTION=="add",KERNEL=="sdh1",RUN+="/bin/raw /dev/raw/raw6 %N"
ACTION=="add",KERNEL=="sdh1",RUN+="/bin/raw /dev/raw/raw7 %N" 
ACTION=="add",KERNEL=="sdh1",RUN+="/bin/raw /dev/raw/raw8 %N" 
ACTION=="add",KERNEL=="sdh1",RUN+="/bin/raw /dev/raw/raw9 %N" 
ACTION=="add",KERNEL=="sdh1",RUN+="/bin/raw /dev/raw/raw10 %N"
ACTION=="add",KERNEL=="sdh1",RUN+="/bin/raw /dev/raw/raw11 %N" 
ACTION=="add",KERNEL=="sdh1",RUN+="/bin/raw /dev/raw/raw12 %N" 
ACTION=="add",KERNEL=="sdh1",RUN+="/bin/raw /dev/raw/raw13 %N" 
ACTION=="add",KERNEL=="sdh1",RUN+="/bin/raw /dev/raw/raw14 %N" 
ACTION=="add",KERNEL=="sdh1",RUN+="/bin/raw /dev/raw/raw15 %N" 
ACTION=="add",KERNEL=="sdh1",RUN+="/bin/raw /dev/raw/raw16 %N"
ACTION=="add",KERNEL=="sdh1",RUN+="/bin/raw /dev/raw/raw17 %N" 
KERNEL=="raw4", OWNER="root", GROUP="dba", MODE="640"
KERNEL=="raw5", OWNER="oracle", GROUP="dba", MODE="644"
KERNEL=="raw[1-3]", OWNER="oracle", GROUP="dba", MODE="660"
KERNEL=="raw[6-9]", OWNER="oracle", GROUP="dba", MODE="660"
KERNEL=="raw1[0-7]", OWNER="oracle", GROUP="dba", MODE="660"

kernel 参数也可以指定详细磁盘路径

ACTION=="add", KERNEL=="/dev/sdb1",RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", ENV{MAJOR}=="8",ENV{MINOR}=="17",RUN+="/bin/raw /dev/raw/raw1 %M %m"
ACTION=="add", KERNEL=="/dev/sdc1",RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add", ENV{MAJOR}=="8",ENV{MINOR}=="33",RUN+="/bin/raw /dev/raw/raw2 %M %m"
ACTION=="add", KERNEL=="/dev/sdd1",RUN+="/bin/raw /dev/raw/raw3 %N"
ACTION=="add", ENV{MAJOR}=="8",ENV{MINOR}=="49",RUN+="/bin/raw /dev/raw/raw3 %M %m"
ACTION=="add", KERNEL=="/dev/sde1",RUN+="/bin/raw /dev/raw/raw4 %N"
ACTION=="add", ENV{MAJOR}=="8",ENV{MINOR}=="65",RUN+="/bin/raw /dev/raw/raw4 %M %m"
 
KERNEL=="raw[1-4]", OWNER="oracle", GROUP="oinstall", MODE="640"

cento 6:
启动udev

[root@rrac1 ~]#start_udev

但在linux 7.x 中已经没有start_udev命令,在配置完UDEV 后,需要执行:

[dave@www.cndba.cn ~]# /sbin/udevadm trigger --type=devices --action=change
或者:
[dave@www.cndba.cn ~]# /sbin/udevadm control --reload
[dave@www.cndba.cn rules.d]# ll /dev/raw*
brw-rw---- 1 grid asmadmin 8, 16 Mar 21 22:01 /dev/asmdiskb
brw-rw---- 1 grid asmadmin 8, 32 Mar 21 22:01 /dev/asmdiskc
brw-rw---- 1 grid asmadmin 8, 48 Mar 21 22:01 /dev/asmdiskd
brw-rw---- 1 grid asmadmin 8, 64 Mar 21 22:01 /dev/asmdiske
brw-rw---- 1 grid asmadmin 8, 80 Mar 21 22:01 /dev/asmdiskf

systemctl restart systemd-udev-trigger.service

常用命令:

查看磁盘的信息

cat /proc/partitions

major minor  #blocks  name

   8        0   20971520 sda
   8        1     512000 sda1
   8        2   18361344 sda2
   8        3    2097152 sda3
   8       16    2097152 sdb
   8       17    2096111 sdb1
   8       32    1048576 sdc
  11        0    4415488 sr0

UDEV涉及的一些常见目录信息

ll /sys/class/block/
ll /dev/raw
ll /dev/mapper
ll /dev/block
ll /dev/disk/by-path
ll /dev/disk/by-id
ll /dev/disk/by-uuid   (查看uuid)

RHEL 7 查看scsi_id

lsscsi --scsi_id
[root@localhost etc]# lsscsi --scsi_id
[0:2:0:0]    disk    AVAGO    MR-SAS3316       4.74  /dev/sda   36f80f41fe9c3f0002305604d0f7eea16
[0:2:1:0]    disk    AVAGO    MR-SAS3316       4.74  /dev/sdb   36f80f41fe9c3f000230560520fce45e6
[root@localhost etc]# lsscsi --scsi_id -g
[0:2:0:0]    disk    AVAGO    MR-SAS3316       4.74  /dev/sda   36f80f41fe9c3f0002305604d0f7eea16  /dev/sg0 
[0:2:1:0]    disk    AVAGO    MR-SAS3316       4.74  /dev/sdb   36f80f41fe9c3f000230560520fce45e6  /dev/sg1 

UDEV参数说明

UDEV规则的匹配字段属性

ACTION 匹配事件的动作名,例如:add( 添加设备 )、remove( 删除设备 )。
DEVPATH 匹配事件的设备相对路径。例如:sda的devpath是/dev/sda,sda2的devpath是/dev/sda2。
KERNEL 匹配事件的设备名字,比如sdb,比如sd*表示任意SCSI磁盘设备
NAME 匹配网络接口或者设备节点的名字。NAME只有在前面的规则赋值之后才可以使用。
SYMLINK 匹配设备节点符号链的名字。SYMLINK 只有在前面的规则赋值之后才可以使用。可以有多个 symlinks,只需要匹配一个。
SUBSYSTEM 匹配设备子系统
DRIVER 匹配设备在devpath里的设备驱动名称,例如:ide-cdrom。
BUS 设备在devpath 里的总线名称,例如:usb。
ID 设备在 devpath 里的识别号
ENV{key} 环境变量。ENV{MAJOR}"8"和ENV{MINOR}"1"表示sda1
PROGRAM 执行一个程序。如果程序成功返回, key 为 true。设备的属性被放在被执行进程的环境变量中,该程序的输出为 stdout, 可以从 RESULT 这个 key 读取。
RESULT 匹配最近一次 PROGRAM 调用的返回字符串。它应该在 PROGRAM 之后使用。
OWNER 匹配设备文件的属组
GROUP 匹配设备文件所在的组。
MODE 匹配设备文件的权限,采用8进制
MAJOR 表示磁盘号
MINOR 表示磁盘下面的分区号

UDEV规则匹配字段属性和可调用的替换操作符

$kernel, %k:设备的内核设备名称,例如:sda、cdrom。
$number, %n:设备的内核号码,例如:sda3 的内核号码是 3。
$devpath, %p:设备的 devpath路径。
$id, %b:设备在 devpath里的 ID 号。
$sysfs{file}, %s{file}:设备的 sysfs里 file 的内容。其实就是设备的属性值。
$env{key}, %E{key}:一个环境变量的值。
$major, %M:设备的 major 号。
$minor %m:设备的 minor 号。
$result, %c:PROGRAM 返回的结果。
$parent, %P:父设备的设备文件名。
$root, %r:udev_root的值,默认是/dev/。
$tempnode, %N:临时设备名。
%%:符号 % 本身。
$$:符号 $ 本身。

ENV{key}的特别说明

linux内核中表示不同的设备是通过major 和minor number实现的,通过major和minor Number来加载相应的驱动程序。
sda和sdb的major number都是8,sda的minor number是0开始, sdb的minor number 是16开始。
ENV{major} major表示不同的设备类型
ENV{minor} minor表示同一个设备的的不同分区
ACTION"add", KERNEL"sda", RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION"add", ENV{MAJOR}"8", ENV{MINOR}=="1", RUN+="/bin/raw /dev/raw/raw2 %M %m"

通过UUID挂载硬盘

1.查看硬盘的UUID

lsblk -f

2.修改etc/fstab
①.新手先备份一下fstab文件,防止改错无法正常启动机器。
②.把上一步查询到的UUID,通过命令在fstab文件尾部追加:

echo "UUID=c4d4e2f9-f10d-4a61-b092-df39820645d3 /mnt  ext4 defaults     0   0" >>/etc/fstab

③.测试是否配置正确
执行命令:

mount -a
如果无任何提示,表示正确。如果有提示,则配置不正确。
为确保万无一失,通过以下命令,查看fstab文件最后一行的空格处,是否有特殊字符:

cat -v /etc/fstab

六.配置重启后自动挂载硬盘
1.查看系统盘符的ID
ls -l /dev/disk/by-id
最后一行结尾带有vdc的是我们新挂载的硬盘,复制其id:virtio-vol-wj0a1ck2

posted @ 2025-07-02 14:11  数据库小白(专注)  阅读(87)  评论(0)    收藏  举报