[TOC]
linux raid 操作总结
配置RAID方案
在Linux中配置RAID
- 安装mdadm工具:mdadm是管理Linux软件RAID的标准工具。首先,需要确保已经安装了它。在基于Debian的系统上,可以使用sudo apt-get install mdadm命令安装。对于基于RPM的系统,使用sudo yum install mdadm。
- 创建RAID阵列:使用mdadm命令创建RAID阵列。
例如,要创建一个RAID 1阵列,使用以下命令:
bash
sudo mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
这里,/dev/md0是新创建的RAID设备,level=1指定了RAID级别为1,raid-devices=2表示有两个设备参与RAID,最后/dev/sda1和/dev/sdb1是参与RAID的两个分区。
- 格式化和挂载RAID设备:创建RAID后,您需要格式化RAID设备,然后挂载它以便使用。
例如:
bash
sudo mkfs.ext4 /dev/md0
sudo mount /dev/md0 /mnt/raid
在其他设备上配置RAID
在非Linux系统或硬件RAID中,配置步骤会有所不同。通常,硬件RAID通过在启动时进入RAID卡的配置界面来设置。对于其他操作系统(如Windows),您可能需要使用特定的管理工具或控制面板选项来配置RAID。
确认是什么RAID级别
在Linux中,您可以使用以下命令来确认RAID级别:
shell
cat /proc/mdstat
mdadm --detail /dev/md0
这些命令会显示当前配置的RAID阵列的详细信息,包括它的级别(例如,RAID 0、RAID 1、RAID 5等)。
cat /proc/mdstat 输出示例
ini
Personalities : [raid1] [raid6] [raid5] [raid4]
md0 : active raid1 sda1[0] sdb1[1]
1953382464 blocks super 1.2 [2/2] [UU]
unused devices: <none>
- Personalities:列出了系统支持的RAID类型。
- md0:当前活跃的RAID设备名称。
- active raid1 sda1[0] sdb1[1]:表示md0是一个活跃的RAID 1阵列,包含两个分区(或磁盘):sda1和sdb1。
- 1953382464 blocks super 1.2 [2/2] [UU]:显示阵列的大小(以块计),使用的元数据版本(1.2),阵列中有2个盘(2/2)都是正常工作状态([UU]表示两个盘都是Up状态)。
- unused devices: :表示没有未使用的设备。
mdadm --detail /dev/md0输出示例
yaml
/dev/md0:
Version : 1.2
Creation Time : Sun Apr 4 12:34:56 2021
Raid Level : raid1
Array Size : 1953382464 (1862.89 GiB 2000.26 GB)
Used Dev Size : 1953382464 (1862.89 GiB 2000.26 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Thu Apr 11 15:00:01 2024
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Name : hostname:0 (local to host hostname)
UUID : a1b2c3d4:e5f6g7h8:i9j0k1l2:m3n4o5p6
Events : 12345
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sda1
1 8 33 1 active sync /dev/sdb1
这个输出提供了关于/dev/md0 RAID设备的详细信息,包括其版本、创建时间、RAID级别、数组大小、设备状态等。
- Raid Level:显示RAID级别为raid1。
- Array Size:显示数组的总大小。
- Raid Devices:显示参与RAID的设备数量。
- Active Devices:显示当前活跃(工作正常)的设备数量。
- Failed Devices、Spare Devices:分别显示失败和备用的设备数量。
下面的列表提供了每个参与RAID的设备的状态和位置信息,例如/dev/sda1和/dev/sdb1都处于"active sync"状态,意味着它们正在同步数据。
如何确认设备是否做了RAID
- 在Linux中:使用上述cat /proc/mdstat或mdadm --detail /dev/md0命令不仅可以查看RAID级别,还可以确认是否配置了RAID。
- 在Windows中:可以通过"磁盘管理"工具查看磁盘配置情况,如果有RAID配置,通常会显示为动态磁盘或者有相关的RAID标识。
- 在BIOS/UEFI中:对于硬件RAID,通常需要在计算机启动时进入BIOS/UEFI设置界面,在那里可以查看和配置RAID设置。
其他方式
fdisk
fdisk -l(其中-l是小写的L)命令确实可以在Linux中用来查看所有已连接存储设备的分区情况,包括硬盘驱动器、固态驱动器以及设置为RAID的设备。它主要用于显示分区信息,而不直接显示RAID配置详情。
使用fdisk -l查看RAID情况
当您运行fdisk -l时,如果系统中配置了软件RAID,您可能会看到类型为"Linux raid auto"的分区,这表明这些分区被用作RAID设备的一部分。例如:
bash
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 1953523711 1953521664 931G fd Linux raid autodetect
/dev/sdb1 2048 1953523711 1953521664 931G fd Linux raid autodetect
这里,/dev/sda1和/dev/sdb1都被标记为"Linux raid autodetect",这意味着它们被配置为RAID的一部分。
使用限制
fdisk -l能提供一定的信息,但它不会告诉RAID的级别(如RAID 0、RAID 1等),也不会提供关于RAID阵列当前状态的详细信息。
对于这些更具体的信息,需要使用专门的工具,如:
- mdadm:对于软件RAID,mdadm --detail /dev/mdX(其中/dev/mdX是您的RAID设备)将提供关于特定RAID阵列的详细信息,包括其级别、状态、参与的设备等。
- 硬件RAID管理工具:对于硬件RAID,通常需要使用特定于制造商的管理软件或固件界面来查看和管理RAID配置。
lsblk
- lsblk(列出块设备)是一个列出所有可用块设备的命令,包括它们的挂载点和分区。它提供了一个很好的设备层次结构视图,可以帮助识别哪些设备是RAID阵列的一部分。
- 使用示例
bash
lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,TYPE
- NAME: 设备的名称。
- FSTYPE: 文件系统类型。
- SIZE: 设备的大小。
- MOUNTPOINT: 设备的挂载点。
- TYPE: 设备类型(如磁盘、分区、lvm等)。
- 输出结果示例
bash
NAME FSTYPE SIZE MOUNTPOINT TYPE
sda 931.5G disk
├─sda1 ext4 500M /boot part
├─sda2 1G [SWAP] part
└─sda3 ext4 930G / part
sdb 931.5G disk
├─sdb1 931.5G part
md0 ext4 931G raid1
- sda 和 sdb 是系统中存在的两个磁盘,大小均为931.5G。
- sda1, sda2, sda3 是sda磁盘上的分区。其中,sda1是一个500M的ext4文件系统,挂载在/boot;sda2是一个1G的交换分区;sda3是一个930G的ext4文件系统,挂载在根目录(/)。
- sdb1 是sdb磁盘上的一个分区,大小为931.5G,但没有使用(未格式化或未挂载)。
- md0 是一个RAID设备,使用ext4文件系统,大小为931G。它的类型被标记为raid1,说明它是一个RAID 1阵列。这个设备可能由sdb1和另一个未在此列表中显示的分区组成。
parted
- parted是一个功能强大的磁盘分区和管理工具,可以用来创建、调整、复制和删除硬盘驱动器上的分区。
- 使用示例:运行sudo parted -l可以列出所有磁盘的分区表,包括RAID设备。
bash
sudo parted -l
这条命令会列出所有检测到的磁盘及其分区表的信息。-l选项是--list的简写,用于显示当前所有磁盘的分区信息。
- 输出结果示例
ini
Model: ATA Samsung SSD 860 (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1049kB 538MB 537MB fat32 EFI System Partition boot, esp
2 538MB 1000GB 999GB ext4 Linux filesystem
Model: Linux Software RAID Array (md)
Disk /dev/md0: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Number Start End Size File system Flags
1 0.00B 2000GB 2000GB ext4
- 第一部分显示了一个名为ATA Samsung SSD 860的SSD磁盘(/dev/sda),大小为1000GB。它使用GPT分区表,并且有两个分区:
- 分区1:大小为537MB,使用FAT32文件系统,是EFI系统分区(用于启动),具有boot, esp标志。
- 分区2:大小为999GB,使用ext4文件系统,是Linux文件系统分区。
- 第二部分显示了一个软件RAID数组(/dev/md0),大小为2000GB。它使用loop分区表,并且有一个大分区:
- 分区1:占据整个RAID数组的空间,大小为2000GB,使用ext4文件系统。
lshw
- lshw(硬件列表)是一个显示你的系统硬件配置的工具,对于识别与RAID相关的硬件信息特别有用。
- 使用示例:sudo lshw -class disk -class storage可以显示存储设备和控制器的信息。
bash
sudo lshw -class disk -class storage
这个命令会列出所有的磁盘和存储控制器的信息。-class disk指定了只显示磁盘类别的硬件,-class storage则是指定显示存储控制器类别的硬件。
- 输出结果示例
yaml
*-storage
description: SATA controller
product: 6 Series/C200 Series Chipset Family 6 port SATA AHCI Controller
vendor: Intel Corporation
physical id: 1f.2
bus info: pci@0000:00:1f.2
logical name: scsi0
logical name: scsi1
version: 05
width: 32 bits
clock: 66MHz
capabilities: storage ahci_1.0 emulated
configuration: driver=ahci latency=0
resources: irq:27 ioport:f0d0(size=8) ioport:f0c0(size=4) ioport:f0b0(size=8) ioport:f0a0(size=4) ioport:f060(size=32) memory:f7c06000-f7c067ff
*-disk
description: ATA Disk
product: SSDSC2BW240A3L
vendor: Intel
physical id: 0.0.0
bus info: scsi@0:0.0.0
logical name: /dev/sda
version: DC32
serial: XXXXXXXX
size: 223GiB (240GB)
capabilities: partitioned partitioned:dos
configuration: ansiversion=5 logicalsectorsize=512 sectorsize=512 signature=000beef1
*-disk
description: ATA Disk
product: WDC WD10EZEX-08M2NA0
vendor: Western Digital
physical id: 0.1.0
bus info: scsi@1:0.0.0
logical name: /dev/sdb
version: 1A01
serial: XXXXXXXX
size: 931GiB (1TB)
capabilities: gpt-1.00 partitioned partitioned:gpt
configuration: ansiversion=5 guid=XXXXXXXX logicalsectorsize=512 sectorsize=512
存储控制器:列出了一个SATA控制器,包含了制造商、型号、物理ID、总线信息、驱动信息等。这些信息有助于识别系统中使用的存储接口类型。
磁盘:显示了两个ATA磁盘,分别是一个223GiB的Intel SSD和一个931GiB的Western Digital硬盘。对于每个磁盘,lshw列出了产品型号、供应商、物理ID、总线信息、逻辑名称(如/dev/sda)、大小以及其他配置细节。
lsscsi
- lsscsi列出SCSI设备(或ATA/ATAPI设备)的信息,可以用来识别连接到系统的所有SCSI/ATA设备,包括RAID控制器。
- 使用示例:简单地运行lsscsi可以列出所有SCSI设备。
bash
lsscsi
这个命令将会列出系统中所有已识别的SCSI设备,包括硬盘、光驱等。
- 输出结果示例
ini
[0:0:0:0] disk ATA Samsung SSD 850 2B6Q /dev/sda
[1:0:0:0] cd/dvd HL-DT-ST DVDRAM GH24NSC0 LK00 /dev/sr0
[2:2:0:0] disk LSI MR9271-4i 3.24 /dev/sdb
[2:2:1:0] disk LSI MR9271-4i 3.24 /dev/sdc
- [0:0:0:0] disk ATA Samsung SSD 850 /dev/sda:这一行表示系统中有一个ATA接口的Samsung SSD 850固态硬盘,设备文件是/dev/sda。[0:0:0:0]是设备的SCSI地址,表示它连接在SCSI总线0, 设备号0, LUN号0。
- [1:0:0:0] cd/dvd HL-DT-ST DVDRAM GH24NSC0 /dev/sr0:这一行表示有一个HL-DT-ST品牌的DVDRAM光驱,设备文件是/dev/sr0,连接在SCSI总线1, 设备号0, LUN号0。
- [2:2:0:0] disk LSI MR9271-4i /dev/sdb 和 [2:2:1:0] disk LSI MR9271-4i /dev/sdc:这两行表示通过LSI品牌的MR9271-4i RAID控制器连接的两个磁盘设备,分别对应设备文件/dev/sdb和/dev/sdc。这可能是一个RAID阵列的一部分。
smartctl
- smartctl是SMART硬盘监控分析和报告工具的一部分,用于打印磁盘健康状况、测试等。它对于检查RAID阵列中磁盘的健康状态非常有用。
- 使用示例:sudo smartctl -a /dev/sda显示指定硬盘的所有SMART信息,包括健康状态。
bash
sudo smartctl -a /dev/sda
- sudo:由于smartctl需要访问硬件级别的信息,通常需要超级用户权限来运行。
- smartctl:就是要执行的命令本身。
- -a:这个选项告诉smartctl显示所有可用的SMART信息,包括磁盘健康状况、所有收集到的SMART属性等。
- /dev/sda:指定要检查的设备。在这个例子中,/dev/sda是第一个SATA硬盘。如果您想检查另一个硬盘,比如第二个硬盘(通常是/dev/sdb),只需相应地更改这个参数。
- 输出结果示例
yaml
SMART Attributes Data Structure revision number: 10
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x000f 083 064 006 Pre-fail Always - 124345
5 Reallocated_Sector_Ct 0x0033 100 100 036 Pre-fail Always - 0
9 Power_On_Hours 0x0032 099 099 000 Old_age Always - 8854
...
SMART Overall-Health Self-Assessment Test result: PASSED
- Raw_Read_Error_Rate, Reallocated_Sector_Ct, Power_On_Hours 等行显示了不同的SMART属性。每个属性都有一个"VALUE"(当前值)、"WORST"(最差值)、以及"THRESH"(阈值)。如果"VALUE"低于"THRESH",可能表示磁盘有故障。
- RAW_VALUE列显示了原始读取的数据,对于不同的属性这些数据代表的意义不同。
- 最后,"SMART Overall-Health Self-Assessment Test result: PASSED"表示磁盘通过了健康自评测试。如果这里显示"FAILED",则意味着磁盘可能即将出现故障,应该尽快备份数据并考虑更换磁盘。
blkid
- blkid命令用于查找/打印块设备的UUID、文件系统类型等属性。
- 使用示例:运行sudo blkid可以显示系统中所有块设备的UUID和文件系统类型,包括RAID分区。
bash
sudo blkid
sudo:由于blkid可能需要特定的权限来访问某些设备信息,使用sudo可以以超级用户权限运行该命令。
blkid:是要执行的命令本身。
主要输出信息
UUID:每个文件系统的唯一标识符。UUID对于确保/etc/fstab文件中的挂载条目在系统重启后依然正确非常重要,因为设备名称(如/dev/sda1)可能会变化。
TYPE:文件系统类型(如ext4、xfs、ntfs)。
LABEL:如果设备有标签(Label),这个标签也会被显示出来。
- 输出结果示例
ini
/dev/sda1: UUID="5f96cafa-e0a7-4a4c-b9a2-2b3e5c8a9676" TYPE="ext4" PARTUUID="00b204d0-01"
/dev/sda2: UUID="I9MkHV-vgN8-Jik6-LAts-Hien-jvge-Q2fCtR" TYPE="LVM2_member" PARTUUID="00b204d0-02"
/dev/mapper/ubuntu--vg-root: UUID="b3f9bc2a-88cb-45f2-b77e-2c37t4e4f6a7" TYPE="ext4"
/dev/mapper/ubuntu--vg-swap_1: UUID="3d3961b4-6e64-4c9d-a8d5-ffd3badb9d0d" TYPE="swap"
/dev/sda1 和 /dev/mapper/ubuntu--vg-root 是类型为ext4的分区,它们拥有各自的UUID。
/dev/sda2 是一个LVM物理卷,其类型为LVM2_member。
/dev/mapper/ubuntu--vg-swap_1 是一个交换分区(swap),也有其独特的UUID。
不同命令使用场景
1.fdisk
- 使用场景:fdisk主要用于磁盘分区。当你需要创建新的分区、删除旧的分区或者查看磁盘分区表时,fdisk是一个非常合适的工具。它支持MBR(主引导记录)分区表。
- 示例场景:安装新硬盘后,使用fdisk来初始化硬盘并创建分区。
2.mdadm
- 使用场景:mdadm是管理Linux软件RAID的工具。当你需要创建、监控、管理或故障排除软件RAID阵列时,这个工具非常有用。
- 示例场景:创建一个RAID 5阵列以提高数据冗余和读取性能;或者当一个RAID阵列的一个磁盘发生故障时,使用mdadm来添加替换磁盘并重建数据。
3.lsblk
- 使用场景:lsblk用于列出所有可用的块设备信息,包括它们的挂载点和分区。这对于快速查看系统中的磁盘和分区结构非常有用。
- 示例场景:在挂载新硬盘之前,确认硬盘的设备名称(如/dev/sdb)。
4.parted
- 使用场景:parted是一个功能强大的磁盘分区和管理工具,支持大于2TB的磁盘和GPT(GUID分区表)。当你需要处理大容量磁盘或需要GPT分区表时,这个工具比fdisk更合适。
- 示例场景:在一块大于2TB的新硬盘上创建GPT分区。
5.lshw
- 使用场景:lshw用于显示系统的硬件配置信息。当你需要详细了解系统中各个硬件组件的信息时,这个命令非常有用。
- 示例场景:在购买二手服务器之前,检查其硬件配置以确保所有组件都符合预期。
6.sscsi
- 使用场景:lsscsi用于列出系统中所有SCSI设备的信息。这对于识别和管理SCSI设备特别有用,例如硬盘、固态硬盘和光驱。
- 示例场景:确认新安装的SCSI硬盘是否被系统识别。
7.smartctl
- 使用场景:smartctl用于检查和监控存储设备(如硬盘和固态硬盘)的健康状况。当你需要预防性地监控存储设备的健康状态,以避免数据丢失时,这个工具非常有用。
- 示例场景:定期检查服务器上硬盘的健康状态,及时发现潜在的硬盘故障。
8.blkid
- 使用场景:blkid用于查找和打印块设备的UUID、文件系统类型等属性。当你需要在脚本中自动挂载磁盘或在/etc/fstab文件中指定挂载点时,这个命令非常有用。
- 示例场景:在系统启动时自动挂载一个外部USB驱动器,通过其UUID来确保正确识别和挂载。