2024年5月

mount -a命令实际上会执行挂载操作,但它不会挂载那些在/etc/fstab中明确标记为noauto的文件系统,也不会重新挂载那些已经挂载的文件系统(除非使用了-o remount选项)。这意味着,如果某个分区在fstab中有定义但当前未挂载,执行mount -a后,该分区会被挂载上。

因此,使用mount -a是一种安全的方式,来检验你对fstab所做的修改是否正确,是否会导致任何挂载错误,而不必重启系统。如果fstab中有错误,执行此命令后系统会给出错误消息,允许你及时修正,避免了因错误的配置导致系统启动失败的风险。

Q:


某LINUX服务器:

[root@t ~]# blkid
/dev/mapper/centos-root: UUID="87b5a8d1-9ba1-4e23-b8d3-ea85f705dccf" TYPE="xfs" 
/dev/vda2: UUID="q7qBhI-fRWe-6IFd-v9Cu-I0So-zIcv-XIoNMM" TYPE="LVM2_member" 
/dev/vda1: UUID="1e3e0806-b543-41d4-bbdd-02bb74483a91" TYPE="xfs" 
/dev/vdb1: UUID="b7bc3a43-c9c0-4f46-9de1-b1fe0ab63c85" TYPE="ext3" 
/dev/mapper/centos-swap: UUID="8a8422c9-7bc1-4fd3-bbce-a9f2ffcecb9c" TYPE="swap" 

[root@t-db ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0              11:0    1 1024M  0 rom  
vda             252:0    0   40G  0 disk 
├─vda1          252:1    0    1G  0 part /boot
└─vda2          252:2    0   39G  0 part 
  ├─centos-root 253:0    0   37G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
vdb             252:16   0  100G  0 disk 
└─vdb1          252:17   0  100G  0 part /data

[root@t-db ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Fri Jan  3 03:48:35 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=1e3e0806-b543-41d4-bbdd-02bb74483a91 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0

那么,该系统自动挂载了几个分区?系统分区有写在fstab吗?


A:


根据您提供的信息,该系统自动挂载了三个分区,并且这些分区都在/etc/fstab文件中有所体现:

根分区 (/):通过LVM的逻辑卷/dev/mapper/centos-root挂载,UUID为87b5a8d1-9ba1-4e23-b8d3-ea85f705dccf。在/etc/fstab中的条目为:

/dev/mapper/centos-root / xfs defaults 0 0

/boot 分区:直接挂载自分区/dev/vda1,UUID为1e3e0806-b543-41d4-bbdd-02bb74483a91。在/etc/fstab中的条目为:

UUID=1e3e0806-b543-41d4-bbdd-02bb74483a91 /boot xfs defaults 0 0

交换分区 (swap):通过LVM的逻辑卷/dev/mapper/centos-swap挂载,UUID为8a8422c9-7bc1-4fd3-bbce-a9f2ffcecb9c。在/etc/fstab中的条目为:

/dev/mapper/centos-swap swap swap defaults 0 0

虽然/dev/vdb1(UUID为b7bc3a43-c9c0-4f46-9de1-b1fe0ab63c85,挂载点为/data)当前是挂载的,但在您提供的/etc/fstab内容中并没有看到对应的自动挂载条目。这意味着这个分区可能是手动挂载的,或者挂载条目被省略了。如果需要该分区在系统启动时自动挂载,应将其添加到/etc/fstab中。


Q:

那你帮我挂载这个/data呗


A:


要将/dev/vdb1(已知挂载点为/data)设置为在系统启动时自动挂载,您需要将其条目添加到/etc/fstab文件中。根据之前的信息,该分区的UUID是b7bc3a43-c9c0-4f46-9de1-b1fe0ab63c85,并且文件系统类型为ext3。

以下是添加到/etc/fstab的正确条目:

UUID=b7bc3a43-c9c0-4f46-9de1-b1fe0ab63c85 /data ext3 defaults 0 2

操作步骤如下:

备份现有的fstab文件(以防万一修改出错):

bash
sudo cp /etc/fstab /etc/fstab.backup

编辑fstab文件,可以使用你喜欢的文本编辑器,这里以nano为例:

bash
sudo nano /etc/fstab

在文件末尾添加上述挂载条目。

保存并关闭编辑器(如果你使用的是nano,可以通过按Ctrl+O来保存更改,然后按Ctrl+X退出)。

测试挂载配置,以确保新条目无误。可以使用mount -a命令来尝试挂载所有在fstab中定义但尚未挂载的文件系统:

bash
sudo mount -a

检查挂载是否成功,通过df -h命令查看:

bash
df -h

你应该能在输出中看到/data分区已经被挂载。

这样设置后,下次系统启动时,/dev/vdb1将自动挂载到/data目录下。

查看硬盘挂载内容:

[root@tjj-qytjll-db ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0              11:0    1 1024M  0 rom  
vda             252:0    0   40G  0 disk 
├─vda1          252:1    0    1G  0 part /boot
└─vda2          252:2    0   39G  0 part 
  ├─centos-root 253:0    0   37G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
vdb             252:16   0  100G  0 disk 
└─vdb1          252:17   0  100G  0 part /data

根据提供的lsblk命令的输出,系统中总共有两个硬盘:

vda:这是一个40GB的磁盘,包含两个分区(vda1和vda2)。vda1用于/boot分区,而vda2是一个LVM(逻辑卷管理)物理卷,进一步划分为centos-root(根分区)和centos-swap(交换分区)。
vdb:这是一个100GB的磁盘,有一个分区vdb1,挂载点为/data。

所以,尽管输出中显示了多个条目(包括分区和逻辑卷),但实际上只有两个物理硬盘设备,即vda和vdb。

PS:关于UUID
在Linux系统中,每个硬盘分区或逻辑卷都有其唯一的UUID(通用唯一标识符),而不是整个硬盘只有一个UUID。UUID是用于唯一标识磁盘分区或文件系统的重要属性,尤其在网络存储、系统恢复和自动挂载配置中非常有用。

根据你之前的lsblk命令输出,若要查看这些分区的UUID,可以使用blkid命令,如:

bash sudo blkid

或者使用带有-f选项的lsblk命令来显示分区的UUID:

bash lsblk -f

这将会列出所有块设备及其分区的详细信息,包括UUID。每个分区(如vda1, vda2, centos-root, centos-swap,
vdb1)都会有一个独立的UUID。

挂载硬盘的流程:

在Linux系统中手动挂载一个硬盘,你需要先完成以下几个步骤:

  1. 查找硬盘设备名

首先,你需要知道硬盘的设备名称。这通常在/dev/目录下,形如/dev/sdX(对于传统SATA硬盘)或/dev/nvme0n1(对于NVMe
SSD)。你可以使用lsblk命令来列出所有可用的块设备:

bash lsblk

  1. 创建挂载点

在文件系统中选择或创建一个目录作为硬盘的挂载点。例如,如果你想将硬盘挂载到/mnt/mydisk,可以这样创建挂载点:

bash sudo mkdir /mnt/mydisk

  1. 挂载硬盘

使用mount命令将硬盘挂载到之前创建的挂载点。假设你的硬盘设备名为/dev/sdb1,命令如下:

bash sudo mount /dev/sdb1 /mnt/mydisk

设置自动挂载(可选)

如果希望硬盘在系统启动时自动挂载,需要编辑/etc/fstab文件。首先获取UUID(通用唯一标识符):

bash sudo blkid /dev/sdb1

然后,使用文本编辑器(如nano或vi)编辑/etc/fstab,添加一行类似于下面的内容(替换UUID=...和挂载点为你实际的值):

UUID=你从上一步得到的UUID /mnt/mydisk ext4 defaults 0 2

确保使用正确的文件系统类型(如上例中的ext4)和挂载选项。

注意事项

在执行上述操作前,请确保你有足够的权限,并且操作谨慎,以免造成数据丢失或系统损坏。
如果硬盘有未格式化的分区或需要格式化,可以使用mkfs.ext4 /dev/sdb1(以ext4为例)进行格式化,但请注意这会清除所有数据。
确保在执行涉及系统文件的操作(如编辑/etc/fstab)时格外小心,错误的配置可能导致系统无法正常启动。

串口协议的报文通常由多个部分组成,包括起始位、数据位、校验位(可选)、停止位等。为了帮助你理解,我们以最常见的UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)串口协议为例,通过一个简单的报文来说明其结构。

假设我们有一个串口配置如下:

波特率:9600bps
数据位:8位
奇偶校验:无
停止位:1位

报文内容:我们要通过串口发送一个字节的数据,假定数据为0x5A(十进制90,二进制1011010)。

报文结构分解:

起始位:串口通信开始时,先发送一个逻辑0电平,作为报文的起始标记。这告诉接收方新报文的开始。

数据位:接下来发送8位数据。对于0x5A,数据位依次为1011010。由于UART是LSB(Least Significant Bit,最低有效位)先发送,所以实际发送顺序为01011010。

校验位:在这个例子中没有校验位,但如果配置了奇偶校验,会在此处插入一位,根据数据位中1的个数决定是0还是1,以保证整个数据位加校验位中1的个数为奇数或偶数。

停止位:数据位发送完毕后,发送至少一位逻辑1电平,作为报文结束的标志。在这个例子中,我们配置了1位停止位。

整个报文过程(时序图简化描述):

起始位:0
数据位(从左至右,LSB先发):0 1 0 1 1 0 1 0
无校验位(如果有,这里会有一位)
停止位:1

总结:
这个简单报文的完整序列就是“0 1011010 1”,其中“0”为起始位,“1011010”为数据位,“1”为停止位。在实际通信中,这些位会按照配置的波特率转换成特定时间长度的高低电平脉冲,接收方按照同样的协议解析这些脉冲,恢复出原始数据。

请注意,这只是最基本的情况,实际应用中还可能涉及到更复杂的报文结构、错误检测和纠正机制等。