Linux——卷

news2024/12/22 19:41:53

Linux——卷

介绍

最近做的项目,涉及到对系统的一些维护,有些盘没有使用,需要创建逻辑盘并挂载到指定目录下。有些软件需要依赖空的逻辑盘(LVM)。

先简单介绍一下卷的一些概念,有分区、物理存储介质、物理卷、卷组、逻辑卷。下面介绍一下概念:

概念介绍参考文章:

  • https://cloud.tencent.com/developer/article/2429857
  • https://blog.csdn.net/yufuloo/article/details/80929116
  • https://blog.csdn.net/qq_37871657/article/details/143209437
  • 分区(Partition) :是在物理存储介质上(磁盘)上划分出来的独立存储区域,每个分区可以视为一个独立的磁盘,格式化后可挂载到文件系统目录下使用。
  • 物理存储介质(The physical media) :这里指系统的存储设备:硬盘,如:/dev/hda、/dev/sda等等,是存储系统最低层的存储单元。
  • 物理卷(physical volume,PV) :物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。是用来构建卷组的基本单元,通常不会被直接挂载,而是通过组合成卷组,然后从卷组中创建逻辑卷。
  • 卷组(Volume Group,VG) :LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。是逻辑卷的基础。
  • 逻辑卷(Logical Volume, LV) :LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。逻辑卷是卷组中的可分配存储空间,它类似于传统的磁盘分区,提供了更多的灵活性,可以在无需重新分区的情况下,动态调整大小。
  • 设备:无论是物理卷还是逻辑卷,都是/dev​下的块设备,可以通过块设备管理工具来对其直接操作,比如:k8s上的符合OCI标准的块设备Storage Class、PV、PVC

分盘

记录一下分盘实战操作。

第一个场景:VG中分配剩余的磁盘空间创建LVM

场景描述

c89b24d7e5db3242baaa934217e78b7

  • OS:ubuntu24.04
  • 系统磁盘有500GB,系统默认只给根分区分配了100GB,剩余400GB未分配LVM
  • 存在VG:/dev/mapper/ubuntu--vg
  • 存在LVM:/dev/mapper/ubuntu--vg-ubuntu--lv​,挂载到根分区
  • 任务:需要将VG中剩余的空间分配给系统目录使用
操作步骤
  1. 查看卷组信息:

    vgdisplay
    
  2. 分出可用空间

    如果卷组有可用的未分配空间,可以创建新的 LVM 逻辑卷:

    sudo lvcreate -L <size>G -n new_lv_name ubuntu--vg
    

    这里 <size>​ 是要分配的大小(如 10​),new_lv_name​ 是新逻辑卷名字,比如 data1​。

  3. 格式化新的逻辑卷:

    sudo mkfs.ext4 /dev/ubuntu--vg/new_lv_name
    
  4. 挂载新逻辑卷到文件系统:

    sudo mkdir /mnt/new_lv_name
    sudo mount /dev/ubuntu--vg/new_lv_name /mnt/new_lv_name
    
  5. 更新 /etc/fstab

    如果想要系统启动时自动挂载,请编辑 /etc/fstab

    echo '/dev/ubuntu--vg/new_lv_name /mnt/new_lv_name ext4 defaults 0 2' | sudo tee -a /etc/fstab
    

    <文件系统> <挂载点> <类型> <选项> <转储> <检查>

经过上面步骤的操作,顺利的将剩余磁盘分配出来,创建了新的LVM并挂载到文件系统使用,同时支持开机自动挂载。

可以使用如下命令查看相关信息:

  • LVM信息:

    lvdisplay
    
  • 卷的信息:

    lsblk
    

第二个场景:从已存在的LVM中分配出空间,分配给新的LVM

场景描述
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 50G 0 loop
sda 8:0 0 447.1G 0 disk
sda1 8:1 0 1G 0 part /boot/efi
sda2 8:2 0 2G 0 part /boot
sda3 8:3 0 444.1G 0 part
ubuntu--vg-ubuntu--lv 252:0 0 100G 0 lvm /
ubuntu--vg-new--lv 252:1 0 344G 0 lvm /data
  • 项目需要安装阿里巴巴开源的软件open-local,它需要一块空的逻辑卷,也就是空闲块设备,可以作为存储底座

  • 并且对设备的类型有要求,逻辑卷具有更多的功能

    不同类型 PV 所支持的存储能力也不同。

    类型动态分配PV扩容PV快照原生块设备IO限流临时卷监控数据
    LVM(共享盘类型)支持支持支持支持支持支持支持
    Device(独占盘类型)支持不支持不支持支持不支持不支持支持
  • 同时,机器的VG中没有空闲的空间了,只能从现有的LVM中分离出部分空间

  • 同时,保证现有的LVM空间中的数据不丢失

操作步骤

建议提前备份数据,再尝试以下操作

  1. 查看当前系统卷信息

    lsblk
    
  2. umount当前LVM

    umount /data
    
  3. 杀死占用mount目录的进程

    sudo lsof +D /data
    kill -9 xxx
    
  4. 对文件系统检查

    sudo e2fsck -f /dev/ubuntu-vg/new-lv
    

    如果有提示被占用,建议重启操作系统,注意把/etc/fstab​中开机自动挂载的配置注释掉

  5. 缩小文件系统,确保缩小后的空间还能容纳之前的数据

    此操作将文件系统调整为 144GB(344GB - 200GB),确保在缩小逻辑卷时不会丢失数据。现在就有200GB的可用空间。

    sudo resize2fs /dev/ubuntu-vg/new-lv 144G
    
  6. 缩小逻辑卷

    这将把逻辑卷的大小调整为 144GB,释放出 200GB 的空间

    sudo lvreduce -L 144G /dev/ubuntu-vg/new-lv
    
  7. 创建新的逻辑卷

    sudo lvcreate -L 200G -n open-local-lv ubuntu-vg
    
  8. 格式化新的逻辑卷

    sudo mkfs.ext4 /dev/ubuntu-vg/open-local-lv
    
  9. 恢复旧逻辑卷挂载点

    mount /dev/ubuntu-vg/new-lv /data
    lsblk
    lvdisplay
    

    注:记得把/etc/fstab​文件中的注释去掉

这样就完成了需求,分离出了200GB的LVM供open-local​使用,且恢复了原来的文件系统和文件。

第三个场景:使用本地持久卷作为k8s集群的块存储

https://kubernetes.io/blog/2019/01/15/container-storage-interface-ga/

场景描述

为k8s集群创建本地的块存储设备

操作步骤
  1. 创建虚拟磁盘文件,将其绑定到循环设备(循环设备不建议在生产环境中使用,这里只是本地测试使用

    $ loop_file="/tmp/test-image-storage.img"
    $ sudo dd if=/dev/zero of=$loop_file bs=1M count=2500
    $ sudo losetup /dev/loop0 $loop_file
    
  2. 创建存储类

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: local-storage
    provisioner: kubernetes.io/no-provisioner
    volumeBindingMode: WaitForFirstConsumer
    
  3. 创建持久卷

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: test-block-pv
    spec:
      capacity:
        storage: 10Gi
      volumeMode: Block
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      storageClassName: local-storage
      local:
        path: /dev/loop0
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - NODE_NAME
    
  4. 创建持久卷claim

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: test-pvc
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
      volumeMode: Block
      storageClassName: local-storage
    
  5. 测试pod示例

    apiVersion: v1
    kind: Pod
    metadata:
      name: large-image-pod
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: kubernetes.io/hostname
                operator: In
                values:
                - NODE_NAME
      volumes:
        - name: test-image-storage
          persistentVolumeClaim:
            claimName: test-pvc
      containers:
        - name: app-container
          image: xxx
          command: ["/bin/sh", "-c"]
          args:
            - sleep 6000
          volumeDevices:
            - devicePath: /dev/xxx
              name: test-image-storage
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2263862.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL通用语法 -DDL、DML、DQL、DCL

SQL 全称 Structured Query Language&#xff0c;结构化查询语言。操作关系型数据库的编程语言&#xff0c;定义了 一套操作关系型数据库统一标准 。 SQL通用语法 MySQL语言的通用语法。 SQL语句可以单行或多行书写&#xff0c;以分号结尾。SQL语句可以使用空格/缩进来增强…

利用DnslogSqlinj工具DNSlog注入

工具下载链接 https://github.com/adooo/dnslogsqlinj 配置 将域名和API进行一个更改 之后再安装两个python2的库就可以使用dnslog进行自动化注入了 python2安装pip2 curl https://bootstrap.pypa.io/2.7/get-pip.py -o get-pip.py python2 get-pip.py库 pip2 install geven…

QT网络(一):主机信息查询

网络简介 在QT中进行网络通信可以使用QT提供的Qt Network模块&#xff0c;该模块提供了用于编写TCP/IP网络应用程序的各种类&#xff0c;如用于TCP通信的QTcpSocket和 QTcpServer&#xff0c;用于 UDP 通信的 QUdpSocket&#xff0c;还有用于网络承载管理的类&#xff0c;以及…

STM32-笔记5-按键点灯(中断方法)

1、复制03-流水灯项目&#xff0c;重命名06-按键点灯&#xff08;中断法&#xff09; 在\Drivers\BSP目录下创建一个文件夹exti&#xff0c;在该文件夹下&#xff0c;创建两个文件exti.c和exti.h文件&#xff0c;并且把这两个文件加载到项目中&#xff0c;打开项目工程文件 加载…

重塑医院挂号体验:SSM 与 Vue 搭建的预约系统设计与实现

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

mysql的事务控制和数据库的备份和恢复

事务控制语句 行锁和死锁 行锁 两个客户端同时对同一索引行进行操作 客户端1正常运行 客户端2想修改&#xff0c;被锁行 除非将事务提交才能继续运行 死锁 客户端1删除第5行 客户端2设置第1行为排他锁 客户端1删除行1被锁 客户端2更新行5被锁 如何避免死锁 mysql的备份和还…

C# OpenCV机器视觉:尺寸测量

转眼就是星期一了&#xff0c;又到了阿强该工作的时候了&#xff01;阿强走进了他作为机器视觉工程师的办公室&#xff0c;准备迎接新一天的挑战。随着周末的结束&#xff0c;他心中暗想&#xff1a;“如果我能让机器像我一样聪明&#xff0c;那就太好了&#xff01;” 正当他…

四川托普信息技术职业学院教案1

四川托普信息技术职业学院教案 【计科系】 周次 第 1周&#xff0c;第1次课 备 注 章节名称 第1章 XML语言简介 引言 1.1 HTML与标记语言 1.2 XML的来源 1.3 XML的制定目标 1.4 XML概述 1.5 有了HTML了&#xff0c;为什么还要发展XML 1.5.1 HTML的缺点 1.5.2 XML的特点 1.6 X…

网络安全防范

实践内容 学习总结 PDR&#xff0c;$$P^2$$DR安全模型。 防火墙&#xff08;Firewall&#xff09;&#xff1a; 网络访问控制机制&#xff0c;布置在网际间通信的唯一通道上。 不足&#xff1a;无法防护内部威胁&#xff0c;无法阻止非网络传播形式的病毒&#xff0c;安全策略…

GhostRace: Exploiting and Mitigating Speculative Race Conditions-记录

文章目录 论文背景Spectre-PHT&#xff08;Transient Execution &#xff09;Concurrency BugsSRC/SCUAF和实验条件 流程Creating an Unbounded UAF WindowCrafting Speculative Race ConditionsExploiting Speculative Race Conditions poc修复flush and reload 论文 https:/…

c4d动画怎么导出mp4视频,c4d动画视频格式设置

宝子们&#xff0c;今天来给大家讲讲 C4D 咋导出mp4视频的方法。通过用图文教程的形式给大家展示得明明白白的&#xff0c;让你能轻松理解和掌握&#xff0c;不管是理论基础&#xff0c;还是实际操作和技能技巧&#xff0c;都能学到&#xff0c;快速入门然后提升自己哦。 c4d动…

你的第一个博客-第一弹

使用 Flask 开发博客 Flask 是一个轻量级的 Web 框架&#xff0c;适合小型应用和学习项目。我们将通过 Flask 开发一个简单的博客系统&#xff0c;支持用户注册、登录、发布文章等功能。 步骤&#xff1a; 安装 Flask 和其他必要库&#xff1a; 在开发博客之前&#xff0c;首…

嵌入式单片机的运行方式详解

程序的运行方式轮询系统 指的是在程序运行时,首先对所有的硬件进行初始化,然后在主程序中写一个死循环,需要运行的功能按照顺序进行执行,轮询系统是一种简单可靠的方式,一般适用于在只需要按照顺序执行的并且没有外部事件的影响的情况下。 程序的运行过程中出现如按键等需…

学技术学英文:SpringBoot的内置监控组件-Spring Boot Actuator

导读&#xff1a; Spring Boot Actuator是Spring Boot提供的一个模块&#xff0c;简单配置后就能开启&#xff0c;属于拿来即用&#xff0c;具体功能如下&#xff1a; 监控和管理Spring Boot应用 Spring Boot Actuator提供了一组REST端点和命令行工具&#xff0c;用于查看应…

「Mac畅玩鸿蒙与硬件45」UI互动应用篇22 - 评分统计工具

本篇将带你实现一个评分统计工具&#xff0c;用户可以对多个选项进行评分。应用会实时更新每个选项的评分结果&#xff0c;并统计平均分。这一功能适合用于问卷调查或评分统计的场景。 关键词 UI互动应用评分统计状态管理数据处理多目标评分 一、功能说明 评分统计工具允许用…

压缩glb模型文件

使用?gltf-pipeline进行压缩&#xff1a; GitHub地址[这里是图片001]https://github.com/CesiumGS/gltf-pipeline 1. 安装gltf-pipeline npm install -g gltf-pipeline2. 在glb文件目录打开cmd进行命令行压缩&#xff1a; // cmd: gltf-pipeline -i glb.glb -d -s以下是 -…

创建SpringBoot项目的五种方式

1. 使用SpringBoot官方模板创建 1.1 IDEA集成创建 File > new Project 目前SpringBoot官方对于SpringBoot模板版本都比较新&#xff0c;所以对Java的依赖版本也很新&#xff0c;这里可以看到已经不支持jdk8了&#xff0c;并且只有SpringBoot3版本 我们选择好之后点击…

软件维护的实施

软件维护活动 (1) 维护机构 除了较大的软件开发公司外&#xff0c;通常在软件维护工作方面&#xff0c;不保持正式的维护机构。维护往往是在没有计划的情况下进行的。虽然不要求建立一个正式的维护机构&#xff0c;但是在开发部门&#xff0c;确立一个非正式的维护机构则是非常…

stm32 rtc 详解

目录 L151 RTC 唤醒代码 方式一 通过 RTC Alarm Interrupt&#xff1a;(基本和F1系列一样)&#xff1a; L151 RTC 唤醒代码 方式二 通过 RTC WakeUp Interrupt F103VE RTC 闹钟唤醒代码 &#xff08;103RC 没有闹钟中断&#xff09;&#xff1a; RTC&#xff08;real time…

arcgisPro相接多个面要素转出为完整独立线要素

1、使用【面转线】工具&#xff0c;并取消勾选“识别和存储面邻域信息”&#xff0c;如下&#xff1a; 2、得到的线要素&#xff0c;如下&#xff1a;