Linux 磁盘和文件系统

目录

RAID 磁盘冗余阵列

基础RAID类型

RAID0 (无冗余)

RAID1(冗余)

RAID5(一个校验位)

RIAD6 (两个校验位)

组合RAID类型

RAID 10 (冗余、镜像)

RAID选择建议

LVM(逻辑卷管理器)

一、基本概念

二、常用命令

三、创建流程

四、扩容流程

五、缩容

六、删除操作

七、其他操作

磁盘管理

一、常见文件系统类型

二、EXT 和 XFS

EXT 

XFS

三、磁盘分区管理

(一)管理命令 fdisk

(二)一些分区技巧 (生产环境慎用)

1、现有分区扩容(虚拟硬盘扩容后,分区扩容):

2、扩容PV卷(虚拟硬盘扩容后,PV卷扩容)

3、大文件制作loop设备

4、制作swap 

四、磁盘挂载

五、磁盘及目录使用

ext 修复

xfs 修复


RAID 磁盘冗余阵列

描述:RAID (Redundant Array of Independent Disks)有软件和硬件两种方式,硬件需要有RAID阵列卡,这里主要记录RAID的类型,不记录配置,工作中的硬件服务器一般有带有RAID卡,配置也比较简单,就不做赘述。

在操作系统层面,RAID就是一个块设备(硬盘)

联想RAID描述,这里有图文描述,更直观和详细

注意:硬件RAID阵列信息是写入到硬盘上的,所以RAID完整的情况下,是可以整组迁移到另外的同型号RAID卡上的。

基础RAID类型

基础类型RAID主要有RAID 0/1/5/6 ,RAID名字叫冗余,所以我记忆方式是1表示True,表示冗余

RAID0 (无冗余)

简介:将数据条带化,分散写入所有盘

要求:一块硬盘起步

容量:硬盘容量累加

优点:读写速度最快

缺点:数据不安全,坏盘就丢数据

RAID1(冗余)

简介:数据镜像化,一份数据写入到多个磁盘内

要求:2块硬盘

容量:1块硬盘容量

优点:安全,最多可坏1块盘,读取速度较快,坏盘替换后数据重建时间快

缺点:写入速度较慢,容量等于最小的那块盘

RAID5(一个校验位)

简介:将数据条带化,同时写入多块盘,相同位置一份数据做奇偶校验,保证数据安全

要求:4块盘起步

容量:N-1 块硬盘容量

优点:兼顾可靠性和容量,因为数据校验,最多可损失一块盘

缺点:容错只有一块硬盘,可以考虑增加热备盘;因为要校验,坏盘替换后的数据重建慢

RIAD6 (两个校验位)

简介:将数据条带化,同时写入多块盘,两份数据做奇偶校验,保证数据安全

要求:4块硬盘起步

容量:N-2 块硬盘容量

优点:兼顾可靠性和容量,因为数据校验,最多可损失两块盘

缺点:因为要校验,坏盘替换后的数据重建慢

组合RAID类型

RAID 10 (冗余、镜像)

简介:先镜像后条带,硬盘先组成RAID1的磁盘组,然后将RAID1盘组成RAID0组

要求:4块起步,偶数个硬盘

容量:容量是硬盘总数的一半

优点:读写速度,重建速度,可靠性都很好,如果不是同一组的RAID1一起坏,数据不会丢失

缺点:容量少一半如果一组RAID1坏了,数据丢失,所以当出现硬盘故障,需及时更换,或者增加热备盘

RAID选择建议

1)如果对数据写入速度有要求,但是不需要保证数据安全性,可以做RAID0

2)对数据读写和可靠性有要求,但是不关注容量,做RAID10

3)如果对可靠性和容量都有要求,做RAID5或者RAID6

4)目前工作中系统盘和数据盘隔离,系统盘做的RAID1


LVM(逻辑卷管理器)

一、基本概念

PV(物理卷):位于LVM的最底层,可以由物理盘、硬盘分区、磁盘阵列生成
VG (卷组):建于物理卷之上,一个卷组可以包含多个物理卷,可以动态添加物理卷
LV (逻辑卷):用卷组中的资源建立,可以扩容和缩容(缩容有危险
PE (基本单元):可以理解为LVM最小的存储单元

lvm 配置文件: /etc/lvm.conf

需要安装 lvm2 :Userland logical volume management tools

二、常用命令

具体的参数,需要通过man或者help看帮助手册

功能/命令物理卷管理卷组管理逻辑卷管理
扫描pvscanvgscanlvscan
建立pvcreatevgcreatelvcreate
显示(-v 详情)pvdisplay / pvsvgdisplay / lvs lvdisplay / lvs
删除pvremovevgremovelvremove
扩展pvresizevgextendlvextend / lvresize
重命名vgrenamelvrename
激活vgchangelvchange
缩小vgreducelvreduce

三、创建流程

1、创建PV (可以是磁盘或者是分区,不要给分区格式化)
pvcreate /dev/sdb

2、创建VG 首次创建,如下方式可以跳过,直接执行第三步
vgcreate vg_name /dev/sdb

3、将PV加入到VG中 (这里注意是用创建PV的设备或者分区)
vgextend vg_name /dev/sdb

4、创建LV并分配空间 (-L 150M 就是创建150M,-l 25 就是创建25*4M,-l指定4M为单位的块数)
lvcreate -n lv_name -l 25 vg_name

分配全部vg容量
lvcreate -l 100%FREE -n lv_name vg_name

lvdisplay 查看逻辑卷信息,能看到逻辑卷路径

5、格式化LV (系统用什么格式就用什么格式,比如xfs)

mkfs.xfs /dev/vg_name/lv_name

6、挂载LV

mkdir /test_lv

mount /dev/vg_name/lv_name /test_lv

写入挂载文件

vi /etc/fstab
mount -a 

注意:变更/etc/fstab 一定要用mount -a测试一下,避免重启时挂载失败导致进入救援模式

四、扩容流程

1、检查VG是否有剩余资源 (如果没有,就按照上面流程给VG添加PV资源)
vgdisplay

可选:vg扩容

vgextend  vg_name /dev/sdc

可选:pv扩容

可能存在虚拟机的硬盘扩容,通过pvresize 来刷新pv容量

2、LV扩容
lvresize -L +2G /dev/vg_name/lv_name
或者下面的方式,将设备剩余容量全部加入LV
lvextend /dev/vg_name/lv_name /dev/sdb

3、刷新设备容量

先查看文件系统类型

df -Th 或者 查看 /etc/fstab

xfs 文件系统:

xfs_info /dev/vg_name/lv_name

xfs_growfs /dev/vg_name/lv_name

ext 文件系统:

resize2fs /dev/vg_name/lv_name

4、查看扩容结果

df -Th

五、缩容

xfs无法收缩,ext4可以,不建议做缩容操作,有数据丢失风险,不记录

六、删除操作

1、卸载挂载点 (注意清理/etc/fstab 以及其他挂载配置,避免系统重启失败)

umount /test_lv

2、删除逻辑卷 (谨慎操作)

lvremove /dev/vg_name/lv_name

 3、删除卷组 (使用卷组名,谨慎操作,删除前请确认是否有其他卷组在使用!!!)

vgremove storage

4、删除物理卷(谨慎操作)
pvremove /dev/sdb

七、其他操作

1、有次硬盘迁移后,系统识别不到文件系统,进入救援模式了

1)查看逻辑卷的情况

        ls /dev/mapper 

2)发现仅有control 文件,所有的逻辑卷都丢失了

3)尝试激活逻辑卷 如果是单用户,不用敲lvm

        lvm vgscan  扫描本机的卷组

        lvm vgchange -ay 卷组名 激活卷组下的逻辑卷

        ls /dev/mapper 此时可以看到逻辑卷恢复情况

4)尝试修复逻辑卷 要先确认文件系统是xfs     注意:swap 不是 xfs

        xfs_repair -v -L /dev/mapper/卷组路径

        -L 是强制修复,说是可能会清理log和元数据,目前测试数据没丢,强制日志清零

5)如果不确定就都修复一下,小分区10秒左右,如果无文件损坏的情况下

6)重启,正常进入系统

2、有次测试卷组迁移,然后还是重名卷组

vgs -v 查看卷组详情,每个卷组都有唯一的UUID

vgrename nOcFSI-6mnX-5fcE-uhjD-Rgh3-SB63-vYOdEc new_vg_name

刚特地测试了vg重命名,很快,貌似没啥影响

3、重装系统VG数据是否会丢失

主要由VG的完整性决定的,VG的PV如果有缺失,即使PV没有数据,也无法保持VG可用

我测试过,系统盘和数据盘完全隔离的情况下,数据盘VG在系统重装或者替换一个版本,VG是完整的,lvs 能看到之前建好的卷组


磁盘管理

一、常见文件系统类型

常用文件系统

  • xfs Centso预设文件系统
  • ext4 Linux 早期适用的文件系统类型
  • swap Linux交换分区,可提供虚拟内存,不过会影响IO速度
  • vfat 同时支持Linux和Windows
  • nfs 网络文件系统
  • cifs Windows的共享目录,挂载需要用户名和密码
mount -t cifs -o username=win-username,password=win-pasword,uid=linux-username,gid=linux-group  //win-ip/path  /mount_dir_path

不常用文件系统

  • devtmpfs 功用是在 Linux 核心 启动早期建立一个初步的 /dev,令一般启动程序不用等待 udev,缩短 GNU/Linux 的开机时间。
  • tmpfs 内存文件系统
  • ext2、etx3 Linux 早期适用的文件系统类型
  • btrfs 为了取代etx3的文件系统
  • cramfs 压缩式文件系统,在读取需要的文件位置时,就解压这部分内容到内存,通过内存读取数据
  • minix Linux最早使用的文件系统,Minix使用的文件系统
  • proc 伪文件系统,它为内核数据结构提供接口

/etc/filesystems:系统指定的测试挂载文件系统类型的优先级
/proc/filesystems:Linux 系统已经加载的文件系统类型
/lib/modules/$(uname -r)/kernel/fs/      文件系统驱动

二、EXT 和 XFS

以下内容,是鸟哥的Linux私房菜笔记

EXT 

EXT 文件系统特性:

  • superblock:记录文件系统整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息等
  • inode:记录文件的属性,一个文件占用一个 inode,同时记录此文件的数据所在的 block 号码
  • block:实际记录文件的内容,若文件太大时,会占用多个 block 

FAT 系统每个 block 号码都记录在前一个 block 当中,只能链式的读取,需要碎片整理。

索引式文件系统(indexed allocation) ,inode 记录多个块,可以同时读取

ext2 格式化:Boot Sector + Block group

Block group:

  • data block:
  1. 放置文件内容数据,Ext2 文件系统中所支持的 block 大小有 1K, 2K 及4K 三种
  2. block 差异会导致文件系统能够支持的最大磁盘容量与最大单一文件容量并不相同
  3. 原则上,block 的大小与数量在格式化完就不能够再改变了(除非重新格式化)
  4. 每个 block 内最多只能够放置一个文件的数据,即使有剩余容量
  • inode table:
  1. inode 的内容在记录文件的属性以及该文件实际数据是放置在哪几号 block
  2. 每个文件都仅会占用一个 inode 
  3. 系统读取文件时需要先找到 inode,符合相关权限才能读取block
  4. 12 个直接,一个间接,一个双间接与一个三间接记录区来实现更多block的记录
  • super block:
  1. 记录整个 filesystem 相关信息的地方,没有超级块就没有文件系统
  2. block 与 inode 的总量;inode / block 大小和使用情况
  3. 文件系统挂载时间、最近一次写入数据的时间、最近一次检验磁盘 (fsck) 的时间等文件系统的相关信息
  4. 一个valid bit数值,若此文件系统已被挂载,则 valid bit 为0,若未被挂载,则valid bit为1
  5. 一般一个文件系统中仅有一个super block在第一个block group ,其他的是备份
  • Filesystem Description:描述每个 block group 的开始与结束的 block 号码,以及说明每个区段 (superblock,bitmap, inodemap, data block) 分别介于哪一个 block 号码之间
  • block bitmap:从 block bitmap 当中可以知道哪些 block 是空的,能够很快速的找到可使用的空间
  • inode bitmap:inode bitmap 则是记录使用与未使用的 inode 号码

目录:

  • inode 记录该目录的相关权限与属性,并可记录分配到的那块 block 号码
  • block 则是记录在这个目录下的文件名与该文件名占用的 inode 号码数据

文件:

  • 分配一个 inode 与相对于该文件大小的block 数量给该文件,inode 和block 的块大小决定系统支持的最大的文件
  • 如果block超过12个,将会用到间接、双间接或三间接记录区的block,会多出block

文件系统大小与磁盘读取效能:

  • 机械硬盘,如果文件系统分区过大,会出现block离散,导致读取效率会下降

EXT 意外断电:

  • 可能导致数据不一致,需要用e2fsck 做一致性检查和修复
  • 日志式文件系统(可以避免全分区检查)
  1. 当系统要写入一个文件时,会先在日志记录区块中纪录某个文件准备要写入的信息
  2. 开始写入文件的权限与数据;开始更新 metadata 的数据
  3. 完成数据与 metadata 的更新后,在日志记录区块当中完成该文件的纪录

缺点:格式化慢,修复速度慢

XFS

xfs 就是被开发来用于高容量磁盘以及高性能文件系统之用,日志式文件系统

组成:

  • 数据区 (data section)
  1. inode/data block/superblock 等数据,都放置在这个区块
  2. 分为多个储存区群组(allocation groups) 来分别放置文件系统所需要的数据
  3. inode 与 block 都是系统需要用到时,才动态配置产生
    • 每个储存区群组:(与block groups类似)
      1. 整个文件系统的 superblock
      2. 剩余空间的管理机制
      3. inode 的分配与追踪
  • 文件系统活动登录区 (log section)
  1. 用来纪录文件系统的变化,其实有点像是日志区
  2. 文件的变化会在这里纪录下来,直到该变化完整的写入到数据区后,该笔纪录才会被删除
  3. 可以指定外部的磁盘来作为 xfs 文件系统的日志区块
  • 实时运作区 (realtime section)
  1. 当有文件要被建立时,xfs 会在这个区段里面找一个到数个的 extent 区块,将文件放置在这个区块内,等到分配完毕后,再写入到 data section 的 inode 与 block 去
  2. 这个 extent 区块的大小得要在格式化的时候就先指定,最小值是 4K 最大可到 1G
  3. 一般非磁盘阵列的磁盘默认为 64K容量,而具有类似磁盘阵列的 stripe 情况下,则建议 extent 设定为与 stripe 一样大磁盘性能更好
  4. sunit 与 extent 会影响文件系统性能,可以不用额外指定

三、磁盘分区管理

一些命令:

fdisk MBR分区
gdisk GPT分区

lsblk

blkid

parted

mount

(一)管理命令 fdisk

列出当前系统所有的磁盘信息[或者指定的磁盘信息] fdisk -l [/dev/sda]

# fdisk -l /dev/sda
Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000dfd0f

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048        4095        1024   83  Linux
/dev/sda2   *        4096     1052671      524288   83  Linux
/dev/sda3         1052672   209715199   104331264   8e  Linux LVM

# fdisk /dev/sda
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): n
Partition type:
   p   primary (3 primary, 0 extended, 1 free)
   e   extended

磁盘分区管理 fdisk /dev/sda

  • n 创建
  • p 打印
  • w 保存退出
  • q 不保存修改退出 
  • m 帮助文档

注意:

1)分区完必须同步分区信息,否则下一次分区将失败 partprobe 

2)注意只能建4个主分区,或者3个以内主分区加1个扩展分区(最后一个)加n个逻辑分区

3)扩展分区不能初始化,逻辑分区号将从5号开始

4)如果需要了解分区,请移步系统开机流程分区类型

(二)一些分区技巧 (生产环境慎用)
1、现有分区扩容(虚拟硬盘扩容后,分区扩容):

适用情况:ECS主机 vda 磁盘扩容后,vda分区的末尾分区

扩容步骤:

  1. fldisk /dev/vda
  2. p 打印现有分区,记录现有分区起始地址
  3. d 删除分区(不保存,不会删除数据)
  4. n 重建分区(注意原先的起始地址,能扩容最后一个分区)
  5. w 保存
  6. 更新分区表 partprobe
  7. 刷新分区 ext resize2fs 或者 xfs xfs_growfs
  8. df 查看分区扩容情况

2、扩容PV卷(虚拟硬盘扩容后,PV卷扩容)

适用情况:虚拟硬盘扩容后,PV扩容,VG扩容

扩容步骤:pvresize /dev/vdb

3、大文件制作loop设备

适用情况:可以在不改变原有分区配额的情况下调整分区使用使用,比如建一个swap

普通文件系统制作步骤:

# 创建一个5G的大文件 注意大文件文件系统容量
dd if=/dev/zero of=/srv/loopdev bs=1G count=5

# 强制格式化
mkfs.xfs -f /srv/loopdev

# 查看UUID
blkid /srv/loopdev 

# 挂载 建议用文件名来挂载,不要用UUID
mount -o loop /srv/loopdev /mnt

# 查看挂载
/srv/loopdev    xfs       5.0G   33M  5.0G   1% /mnt
4、制作swap 

适用情况:如果系统资源紧张,可以配置swap,像Oracle就需要swap 才能完成安装

制作步骤:

# 方式一
# 分区格式化 (这个分区system ID得是swap,如果是大文件,直接格式化就行,注意被格式化错分区了)
mkswap /dev/vda6

# 启用swap分区(如果原来有,就会叠加上去)
swapon /dev/vda6 

# 方式二
# 文件格式化 
dd if=/dev/zero of=/tmp/swap bs=1G count=5
mkswap /tmp/swap
chmod 0600 /tmp/swap
swapon /tmp/swap

# 后续步骤相同
# 查看swap
free -h 
swapon -s

# 写入fstab 或者rc.local
/tmp/swap swap swap defaults 0 0

# 注意编辑/etc/fstab 必须 mount -a 测试,避免重启系统后因为挂载失败进入救援模式
mount -a

# 异常处理
swapon: /swapfile: insecure permissions 0644, 0600 suggested.
swapoff -a 
chmod 0600 /swapfile 
swapon /swapfile

四、磁盘挂载

1、创建挂载目录(挂载点,挂载后原有数据不会丢,卸载后可访问)

mkdir /data

2、磁盘格式化

mkfs.xfs /dev/sdb

3、挂载

filesystem 的挂载是记录到 /etc/mtab 与 /proc/mounts /proc/self/mounts 中的,前面两个是软连接

# 临时挂载
mount /dev/sdb /data

# 永久挂载 (本地盘)
vi /etc/fstab (按照文件内容,照抄就是)
mount -a (必须步骤,检查能否正常挂载,避免系统启动失败)

# 永久挂载 (网络盘)
方式一:将挂载命令写入到rc.local 文件,在系统启动后挂载
方式二:正常挂载,需要设置defaults,_netdev参数,系统启动后挂载

# 重新挂载
mount -o remount,rw,auto /tmp

# 将 /var 这个目录暂时挂载到 /data/var 底下,可以通过/data/var 访问/var
mount --bind /var /data/var

# USB 磁盘 挂载
# 不能是 NTFS 的文件系统,预设的 CentOS 7 并没有支持 NTFS 文件系统格式
# blkid 找到UUID
/dev/sda1: UUID="ABCD-6D6B" TYPE="vfat"
# 创建挂载点
mkdir /data/usb
# 挂载
mount -o codepage=950,iocharset=utf8 UUID="ABCD-6D6B" /data/usb
# 如果带有中文文件名的数据,那么可以在挂载时指定一下挂载文件系统所使用的文本编码

注意:

1)改动了/etc/fstab 必须使用mount -a 测试文件系统可用性,否则系统重启会出问题

2)/etc/rc.local 如果直接执行,会将里面的命令执行一遍,可能会出现网络盘重复挂载的情况,要谨慎

3)如果出现网络盘重复挂载,cifs实测可以umoun卸载最新的挂载不影响上次的挂载

五、磁盘及目录使用

df 查看磁盘使用情况
    常用命令
        df -Th   查看磁盘使用情况 从super block 获取很快

du 查看目录使用情况
    常用命令
        du -sh * 查看目录使用情况,用于分析目录容量大小 直接到文件系统内去搜寻所有的文件数据 较慢

 注意:如果有挂载网络盘且状态不正常的时候,df 执行可能会没有响应,需要恢复网络盘

强制卸载网络盘:

umount -f /data/nfs 强制卸载依旧busy

fuser -m -v /data/nfs 查看哪个进程在使用nfs

确定进程不影响应用的情况下,kill 进程再卸载

六、文件系统修复(简单版)

ext 修复:

适用情况: 有碰到过重启后,报错说某个分区文件系统INode文件块损坏的情况

处理办法:

测试环境,就是尝试修复

fsck -f /dev/xxxxx

然后一直按y,直到以下提示出现,重启应该就能恢复

            FILE SYSTEM WAS MODIFIED
            REBOOT LINUX

xfs 修复

适用情况:系统意外断电,逻辑卷损坏,尝试修复逻辑卷 要先确认文件系统是xfs

处理办法:

-L 是强制修复,说是可能会清理log和元数据,目前测试数据没丢,强制日志清零

xfs_repair -v -L /dev/mapper/卷组路径

  • 13
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值