使用 RAID合并云服务器磁盘

news/2025/1/7 9:21:01/

文章目录

  • 一、使用 **RAID** 合并磁盘(适用于云中的块存储)
  • 二、报错解决

RAID__1">一、使用 RAID 合并磁盘(适用于云中的块存储)

如果我们需要提高磁盘的性能或冗余,可以考虑使用 RAID(如 RAID 0、RAID 1 或 RAID 5)。不过请注意,RAID 通常是在多个磁盘上配置的,因此需要至少两个磁盘。

基本情况:我已经拥有两块1.75 TiB 的云盘,现在需要在系统为Debian 10 的云服务器中创建一块 RAID 1 的云盘,接下来我们一起操作

  1. 附加多个磁盘到云服务器 通过云平台的控制台,附加两个或更多的磁盘。

    例如我下面已经有/dev/nvme1n1 和 /dev/nvme0n1 两块云盘

    # fdisk -lDisk /dev/nvme1n1: 1.75 TiB, 1920383410176 bytes, 3750748848 sectors
    Disk model: SAMSUNG MZQL21T9HCJR-00A07              
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 131072 bytes / 131072 bytes
    Disklabel type: dos
    Disk identifier: 0x2f91a31bDisk /dev/nvme0n1: 1.75 TiB, 1920383410176 bytes, 3750748848 sectors
    Disk model: SAMSUNG MZQL21T9HCJR-00A07              
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 131072 bytes / 131072 bytes
    
  2. 安装 mdadm 工具 使用 mdadm 创建软件 RAID 阵列。首先安装 mdadm

    apt-get update
    apt-get install mdadm  
    
  3. 创建 RAID 阵列 我们有两个磁盘 /dev/nvme1n1/dev/nvme0n1

    • 如果我们希望创建一个 RAID 1 阵列(数据冗余),可以使用以下命令:

      mdadm --create /dev/md0 --raid-devices=2 --level=1 /dev/nvme1n1 /dev/nvme0n1
      
    • 如果我们希望创建一个 RAID 0 阵列(性能提升但不冗余),可以使用以下命令:

      mdadm --create /dev/md0 --raid-devices=2 --level=0 /dev/nvme1n1 /dev/nvme0n1
      

    参数解释:

    • --create /dev/md0: 创建一个名为 /dev/md0RAID 阵列。
    • --raid-devices=2: 指定 RAID 阵列中使用的设备数量,这里是 2 个设备。
    • --level=0: 指定 RAID 级别为 0,意味着没有冗余,提供性能提升。
    • /dev/nvme1n1 /dev/nvme0n1: 我们要加入到阵列中的磁盘设备。
  4. 格式化 RAID 阵列 创建文件系统(在这里我们格式化文件系统为ext4):

    mkfs.ext4 /dev/md0
    
  5. 挂载 RAID 阵列 创建挂载点并挂载新的 RAID 阵列:

    mkdir /data
    mount /dev/md0 /data
    
  6. 自动挂载 更新 /etc/fstab 文件,以确保 RAID 阵列在系统重启后自动挂载。首先,获取新的 RAID 阵列的 UUID:

    # blkid /dev/md0
    /dev/md0: UUID="c079908b-dc65-466c-abb8-53d482e33f8b" BLOCK_SIZE="4096" TYPE="ext4"
    

    然后编辑 /etc/fstab 文件,添加相应的行:

    UUID=your-uuid /mnt/raid ext4 defaults 0 2
    
  7. 查看磁盘是否挂载

    # df -h
    Filesystem                    Size  Used Avail Use% Mounted on
    /dev/md0                      1.8T  212G  1.5T  13% /data
    

二、报错解决

  1. 报错一:未指定RAID级别

    • 报错信息

      mdadm: a RAID level is needed to create an array.
      
    • 解决方法:创建RAID阵列时,指定RAID级别

      mdadm --create /dev/md1 --raid-devices=2 --level=0 /dev/nvme1n1 /dev/nvme0n1
      
  2. 报错二:磁盘设备资源繁忙

    报错信息

    mdadm: cannot open /dev/nvme1n1: Device or resource busy
    

    报错原因

    主要有两点:

    • 1.该Device被某个进程占用,导致mdadm创建失败。
    • 2.该Device在本机已经被创建过RAID(被其他md设备占用),导致再用mdadm创建md时失败。

    解决方案

      1. 查看有无进程在占用,命令:
      fuser -m -v /dev/nvme1n1   #/dev/nvme1n1 被占用的设备
      

      ​ 若有,则根据进程的PID kill掉,命令:

       ```
      

      kill -9 xxx #xxx为进程的PID。若kill -9 还杀不掉,说明该进程可能死在了内核态,重启机器解决。
      ```

      1. 查看之前该Device是否已经被创建过RAID
      # cat /proc/mdstat
      Personalities : [raid1] 
      md0 : active raid1 nvme1n1[1] nvme0n1[0]1875242304 blocks super 1.2 [2/2] [UU]bitmap: 4/14 pages [16KB], 65536KB chunkunused devices: <none>
      

      如上文所示,该Device在创建md1时已经被占用,md1可能是之前创建成功的RAID也可能是创建失败的残留,要想再使用该Device创建RAID只能停掉之前创建的RAID。命令:

      mdadm -S /dev/md1
      

http://www.ppmy.cn/news/1560959.html

相关文章

青少年编程与数学 02-005 移动Web编程基础 15课题、移动应用开发

青少年编程与数学 02-005 移动Web编程基础 15课题、移动应用开发 一、移动应用&#xff08;app&#xff09;开发二、开发技术1. 原生开发技术栈iOS (Apple平台)Android (Google平台) 2. 跨平台开发技术栈React NativeFlutterXamarinIonic 3. 后端和API技术栈4. 测试和部署5. 版…

WPF通过反射机制动态加载控件

Activator.CreateInstance 是 .NET 提供的一个静态方法&#xff0c;它属于 System 命名空间。此方法通过反射机制根据提供的类型信息。 写一个小demo演示一下 要求&#xff1a;在用户反馈界面点击建议或者评分按钮 弹出相应界面 编写MainWindow.xmal 主窗体 <Window x:C…

服务器数据恢复—服务器硬盘亮黄灯的数据恢复案例

服务器硬盘指示灯闪烁黄灯是一种警示&#xff0c;意味着服务器硬盘出现故障即将下线。发现这种情况建议及时更换硬盘。 一旦服务器上有大量数据频繁读写&#xff0c;硬盘指示灯会快速闪烁。服务器上某个硬盘的指示灯只有黄灯亮着&#xff0c;而其他颜色的灯没有亮的话&#xff…

用户界面软件01

Jens Coldewey 著&#xff0c;Tom.X 译 本文中的模式语言逐步深入地探讨用户界面架构的设计&#xff0c;它基于人机工程学&#xff0c;足以形成一套完整的体系。如果你对这方面有兴趣&#xff0c;请参考[Tog92]&#xff0c;[Coo95]和[Col95]。 本文不讨论用户界面的布局&…

从入门到精通IO模型:长连接、短连接与Java中的IO模型详解

前言 在网络编程中&#xff0c;IO&#xff08;输入/输出&#xff09;模型的选择对于系统的性能和稳定性至关重要。随着互联网的发展&#xff0c;终端设备数量的激增对服务器的并发处理能力提出了更高要求。本文将详细介绍IO模型的历史背景、业务场景、功能点以及底层原理&…

python-leetcode-接雨水

42. 接雨水 - 力扣&#xff08;LeetCode&#xff09; class Solution:def trap(self, height: List[int]) -> int:if not height:return 0left, right 0, len(height) - 1left_max, right_max 0, 0water 0while left < right:if height[left] < height[right]:if h…

JavaScript 随机 数用法

在 JavaScript 中,生成随机数通常是使用 Math.random() 方法。这个方法生成一个伪随机浮点数,范围从 0(包括)到 1(不包括)。以下是一些常见的随机数用法和技巧: 1. 生成一个 [0, 1) 范围内的随机浮点数 let randomNum = Math.random(); console.log(randomNum); // 输

C++软件设计模式之访问者模式

访问者模式&#xff08;Visitor Pattern&#xff09;是行为型设计模式之一&#xff0c;它的主要目的是将数据结构和作用于结构上的操作分离。通过访问者模式&#xff0c;可以在不改变数据结构的前提下&#xff0c;增加对数据的新操作。这种模式尤其适用于需要对一个对象结构中的…