文件系统及存储基础
一、 磁盘及文件系统
1.磁盘
- 硬盘的物理构成:
- 扇区(sector)、磁道(track)、磁头、柱面(cylinder)
- 分区:
- 就是记录每一个分区的起始柱面和结束柱面。
- 分区信息存放在0柱面0磁道1扇区上: MBR 主引导记录(446字节)+DPT磁盘分区表(64字节)+结束标志(2个字节)
- block:
- 数据存储的最小单元
- inode:
- 索引节点,全局唯一编号,除了记录文件的属性外,同时还具有指针功能,指向 文件内容放置的块
- (里面保存的是文件的权限,所有者,所属主等基本信息)
- 文件的拥有者与用户组(owner/group)
- 文件的访问模式(read/write/excute)
- 文件的类型(type)
- 文件建立或状态改变的时间(ctime)、最近一次的读取时间(atime)、最 近修改时间(mtime)
- 文件的大小
- 定义文件属性的标志(flag),如setUID…
- 文件真正内容的指针(pointer)
- 创建目录:
- 分配一个inode和至少一个block
- 创建文件:
- 分配至少一个inode与相对于该文件大小的快数量
- 文件系统构成:(dumpe2fs 可以查看)
2.链接
- 链接:
- 硬链接和软链接(符号链接),多个文件指向同一个iNode,硬链接;符号连接,指 向的是源文件的路径,而不是文件块
- ln (link) [-s -v] 源文件 链接
- 硬链接:
- 在某个目录下的block中增加一个文件关联数据,不会用到inode与磁盘空间
- 只能对文件进行创建,为了避免循环引用
- 不能跨文件系统,可以在不同目录下
- 创建硬链接可以增加文件被连接的次数
- 软链接:
- 建立一个独立的文件,这个文件会让数据的读取指向它连接的文件内容
- 可以对目录创建
- 不会增加被链接文件的链接次数
- 其大小为指定路径所包含的字符个数
- -b 删除,覆盖以前建立的链接
- -d 允许超级用户制作目录的硬链接
- -f 强制执行
- -i 交互模式,文件存在则提示用户是否覆盖
- -n 把符号链接视为一般目录
- -s 软链接(符号链接)
- -v 显示详细的处理过程
3. 查看磁盘情况
- 命令:
- du 查看文件大小 [-s -h ]
- -s 只分别计算命令列中每个参数所占的总用量
- -h 做单位转换
- df 查看硬盘使用情况
- -i 查看inode的使用情况
- -P 不换行显示
- -h 做单位转换
- -T 显示文件系统
- fdisk 查看当前系统识别的硬盘和分区的情况
- 还可用来管理分区
- fdisk /dev/sda
- p:显示当前硬件的分区,包括没有保存的改动
- n:创建一个新的分区
- d:删除一个分区
- w:保存并退出
- q:不保存退出
- t:修改分区类型(文件系统类型)
- l:显示所支持的所有类型
- 还可用来管理分区
- cat /proc/partitions 查看分区
- partprobe [/dev/sda] 通知操作系统分区表的变化
- partx -a [/dev/sda] 告诉内核磁盘分区是否存在及其编号
- cat /proc/filesystem 查看文件系统类型
- du 查看文件大小 [-s -h ]
4.格式化分区
- 高级格式化:mkfs -t ext4
- -b:分区时设定每个数据区块占用空间大小,目前支持1024, 2048 以 及4096 bytes每个块。
- -i:设定inode大小 -N:设定inode数量,有时使用默认的inode数不够用,所以要自定 设定inode数量。
- -c:在格式化前先检测一下磁盘是否有问题,加上这个选项后会非常 慢
- -L:预设该分区的标签label
- j:建立ext3格式的分区,如果使用mkfs.ext3 就不用加这个选项了
5.swap分区
- free 查看物理内存和交换空间使用情况
- 有两种方式可以使用:
- 第一种单独用一个分区来作为swap
- 第二种方式是创建一个文件块,这个文件所占有的空间作为swap使用
- 1、通过fdisk创建swap分区或者使用dd命令创建一个虚拟内存的文件 dd if=/dev/zero of=/tmp/swapfile bs=1M count=1024
- 2、mkswap进行swap分区格式化
- 3、swapon 激活swap分区 swapoff 关闭swap分区
6.挂载
- mount:挂载命令
- 命令格式:mount [-t vfstype] [-o options] device dir
- -a 挂载fstab中提到的所有文件系统
- -o remount 重新挂载已挂载的文件系统
- -o loop:用来把一个文件当成硬盘分区挂接上系统
- -o ro:采用只读方式挂接设备
- -o rw:采用读写方式挂接设备
- 挂载光盘镜像文件
- mount -o loop -t iso9660 /home/sunky/mydisk.iso /mnt/vcdrom
- 命令格式:mount [-t vfstype] [-o options] device dir
7.自动挂载
- 自动化挂载
- 文件系统的配置文件/etc/fstab
- OS在初始时,会自动挂载此文件中定义的每个文件系统
- /dev/sda5 /mnt/test ext4 defaults 0 0
- mount -a:挂载/etc/fstab文件中定义的所有文件系统
- /etc/fstab文件 实现开机自动挂载
二、 配置RAID
- RAID 将一组硬盘连结成来,组成一个阵列,以避免单个硬盘损坏而带来的数据损失, 同时亦提供了比单个硬盘高的可用性及容错性。
- 条带化技术,分散存储在多个盘上。(做切割数据的,存在盘上的对应位置,在外观看来就 是条带状的)
- RAID级别:从读写速度,可靠性来考虑,代表raid的组成方式是不一样的,没有上下级之分
1. RAID0
-
RAID0 俗称“条带”
它将两个或多个硬盘组成一个逻辑硬盘,容量是所有硬盘之和,因为是多个硬盘组合成一个,故可并行写操作,写入速度提高,但此方式硬盘数据没有冗余,没有容错,一旦一个物理硬盘损坏,则所有数据均丢失。 因而, RAID0 适合于对数据量大,但安全性要求不高的场景,比如音像、视频文件的存储等。
- 性能提升:读写
- 冗余能力:不具备
- 空间利用率:n
- 至少两块盘
2. RAID1
-
RAID1 俗称“镜像”
RAID1 读操作速度有所提高,写操作理论上与单硬盘速度一样,但由于数据需要同时写入所有硬盘,实际上稍为下降。 容错性是所有组合方式里最好的,只要有一块硬盘正常,则能保持正常工作。
- 性能提升:写性能下降,读性能提高
- 冗余能力:具备
- 空间利用率:1/2
- 最少由两个硬盘组成
3.RAID 1+0
-
RAID1+0 是先将数据进行镜像操作,然后再对数据进行分组
RAID 10 对存储容量的利用率和 RAID 1 一样低,只有 50%.Raid1+0 方案造成了50%的磁盘浪费,但是它提供了 200%的速度和单磁盘损坏的数据安全性,并且当同时损坏的磁盘不在同一 Raid1 中,就能保证数据安全性、 RAID 10 能提供比RAID 5 更好的性能。
- 性能表现:读写提升
- 冗余能力:具备
- 空间利用率:1/2
- 至少4块
4. RAID 5
-
RAID5 相对于其它的组合方式,在容错与成本方面有一个平衡,因而受 到大多数使用者的欢迎。
RAID5 最少由三个硬盘组成,它将数据分散存储于阵列中的每个硬盘,并且还伴有一个数据校验位,数据位与校验位通过算法能相互验证,当丢失其中的一位时, RAID 控制器能通过算法,利用其它两位数据将丢失的数据进行计算还原。因而 RAID5 最多能允许一个硬盘损坏,有容错性。
- 性能表现:读写提升
- 冗余能力:具备
- 空间利用率:
- (n-1)/n 至少3块
5.RAID6
-
RAID6 是在 RAID5 的基础上改良而成的, RAID6 再将数据校验位增加一位,所以允许损 坏的硬盘数量也由 RAID5 的一个增加到二个。
由于同一阵列中两个硬盘同时损坏的概率非常少,所以, RAID6 用增加一块硬盘的代价,换来了比 RAID5 更高的数据安全性。
- 以上是当前主流的 RAID 组合方式,至于如何选择,则是结合到使用者对数据安全性、 数据冗余、数据可用性、投入成本等各方面的综合衡量。建议:
- 系统盘配置为RAID 1(镜像卷)
- 存储盘配置为RAID 10
- 以上是当前主流的 RAID 组合方式,至于如何选择,则是结合到使用者对数据安全性、 数据冗余、数据可用性、投入成本等各方面的综合衡量。建议:
三、 硬件RAID
1、阵列卡就是用来实现RAID功能的板卡,通常是由I/O处理器、硬盘控制器、硬盘连接器 和缓存等一系列零组件构成的
2、不同的RAID卡支持的RAID功能不同,例如支持RAlD0、RAID1、RAID5、RAID10等
3、RAID卡的接口类型 IDE接口、SCSI接口、SATA接口和SAS接口
4、缓存(Cache)是RAID卡与外部总线交换数据的场所,RAID卡先将数据传送到缓存, 再由缓存和外边数据总线交换数据,缓存的大小与速度是直接关系到RAID卡的实际传输速 度的重要因素,不同的RAID卡出厂时配备的内存容量不同,一般为几兆到数百兆容量不 等。
1. 阵列卡介绍
- 阵列卡
- 全称叫磁盘阵列卡 是用来做 RAID 的。
- 磁盘阵列是一种把若干硬磁盘驱动器 按照一定要求组成一个整体,整个磁盘阵列由阵列控制器管理的系统。
- 冗余磁盘阵列 RAID(Redundant Array of Independent Disks)技术 1987 年由加州大学伯克利分校提 出,最初的研制目的是为了组合小的廉价磁盘来代替大的昂贵磁盘,以降低大批量数据存储 的费用
2. 阵列接口类型
- 接口类型目前主要有几种: IDE 接口、 SCSI 接口、 SATA 接口和 SAS 接口。
- IDE 接口
- IDE 的英文全称为“Integrated Drive Electronics”,即“电子集成驱动器”,
- 比如 ATA、 Ultra ATA、 DMA、 Ultra DMA 等 接口都属于 IDE 硬盘。
- 此外,由于 IDE 口属于并行接口,因此为了和 SATA 口硬盘相区 别, IDE 口硬盘也叫 PATA 口硬盘。
- SCSI 接口
- SCSI 的英文全称为“Small Computer System Interface”(小型计算机系统接口)
- SCSI 硬盘主要应用于中、高端和高档工作站中
- SCSI 硬盘和 普通 IDE 硬盘相比有很多优点:
- 接口速度快,并且由于主要用于服务器,
- 因此硬盘本身的 性能也比较高,硬盘转速快,缓存容量大,
- CPU 占用率低,
- 扩展性远优于 IDE 硬盘,并且 支持热插拔。
- SATA 接口
- SATA(Serial ATA)口的硬盘又叫串口硬盘
- 串口硬盘是一种完全不同于并行 ATA 的硬盘接口类型,由于采用串行方式传输数据而知名。
- 实际上, SATA 仅用四支针脚就能完成所有的工作,分别用于连 接电缆、连接地线、发送数据和接收数据,同时这样的架构还能降低系统能耗和减小系统复 杂性。
- SAS 接口
- SAS 是新一代的 SCSI 技术,和现在流行的 Serial ATA(SATA)硬盘相同
- 采用串行技术以获得更高的传输速度,并通过缩短连结线改善内部空间等
- 串行 SCSI 是点到点的结构,可以建立磁盘到控制器的直接连接。具有以下特点:
- 更好的性能
- 点到点的技术减少了地址冲突以及菊花链连结的减速
- 为每个设备提供了专用的信号通路来保证最大的带宽
- 全双工方式下的数据操作保证最有效的数据吞吐量
- 简便的线缆连
- 更细的电缆搭配更小的连接
- 更好的扩展性
- 可以同时连结更多的磁盘设备
- 更好的性能
- IDE 接口
3. 阵列卡的缓存
- 缓存(Cache)是 RAID 卡与外部总线交换数据的场所, RAID 卡先将数据传送到缓 存,再由缓存和外边数据总线交换
- Write Through 和 Write Back 是阵列卡缓存的两种使用
- 透写和回写
- Write Through 也是 RAID 阵列卡的默认模式
4. 添加硬件raid
- 按照提示进入raid阵列创建
5. 软件raid
- **MD:**multi disks 多磁盘,内核中的模块,可以读取配置文件,来实现 软件RAID
- mdadm
- 创建模式 -C
- 专业选项:
- -l:指定级别
- -n:设备个数
- -a:{yes|no} 自动为其创建设备文件
- -c:chunk大小,默认为64k,(数据块)
- -x:指定空闲盘的个数
- 查看指定信息: mdadm -D /dev/md # 查看指定RAID设备的详细信息
- 查看raid状态: cat /proc/mdstat
- 管理模式 :
- 选项:-a(–add),-d(–del),-r(–remove),-f(–fail)
- **模拟损坏:**mdadm /dev/md1 -f /dev/sdb5
- **移除损坏的磁盘:**mdadm /dev/md1 -r /dev/sdb5
- **添加新的硬盘到已有阵列:**mdadm /dev/md1 -a /dev/sdb7
- **停止阵列:**mdadm -S /dev/md1
- 增长模式: -G 用于增加磁盘,为阵列扩容
- 注意:
- 1、新增加的硬盘需要与原硬盘大小一致
- 2、如果原有阵列缺少工作磁盘(如raid1只有一块在工作,raid5只有 2块在工作),
6. 实验步骤
- 实验步骤:
- 1、添加硬盘
- 2、fdisk 分区 分区类型id要改成fd(linux raid)
- 3、mdadm 命令创建raid阵列
- 4、手动生成/etc/mdadm.conf文件
- DEVICE /dev/hd[a-z] /dev/sd[a-z]’*
- mdadm --examine --scan --config=mdadm.conf >> /etc/mdadm.conf
- 5、格式化raid设备文件
- 6、挂载raid设备文件
- 7、编写/etc/fstab文件,实现开机自动挂载设备
四、 LVM逻辑卷管理
1.卷
- 卷的分类
- PV:(physical volume)物理卷
- VG:(volume Group)卷组
- LV:(logical volume)逻辑卷
- LVM
- LVM:可以动态调整分区大小。
2. 逻辑卷使用
-
创建逻辑卷:
- 创建分区,分区的类型使用Linux LVM :fdisk / gdisk
- 将分区做成物理卷(PV) :pvcreate /dev/sd[a-z]
- 将PV加入到卷组(VG) :vgcreate vgname /dev/[a-z]
- 基于VG创建逻辑卷(LV) :lvcreate -L size -n lvname vgname
- 格式化LV :mkfs.ext4 /dev/vgname/lvname
- 挂载使用 :mount /dev/vgname/lvname /directory
-
扩展逻辑卷:
- 首先需要一块新的硬盘空间,做成LVM分区
- 将分区创建成PV
- 将创建的PV添加到VG :vgextend vgname /dev/sd[a-z]
- 基于新的VG扩展LV :lvextend -L +size /dev/vgname/lvname
- 使系统文件生效 :
- ext4格式的使用:resize2fs /dev/vgname/lvname
- xfs格式使用:xfs_growfs /dev/vgname/lvname
-
缩减逻辑卷:
- 卸载已经挂载的逻辑卷分区
- 利用resize2fs指令修改文件系统大小以实现空间缩减
- e2fsck -f /dev/huateng/jishu
- resize2fs /dev/huateng/jishu 308M
- 使用lvreduce减少逻辑卷空间 lvreduce -L -80M /dev/huateng/jishu
- 挂载缩减后的逻辑卷分区
-
注意事项:
- 不能在线缩减,得先卸载;
- 确保缩减后的空间大小依然能存储原有的所有数据;
- 在缩减之前应该先强行检查文件,以确保文件系统处于一至性状态;
3. 逻辑卷快照
快照提供原始卷的静态视图LVM 快照通过把文件系统的改变记录到一个快照分区,因此当你创建一个快照分区时,你不需要使用和你正创建快照的分区一样大小的分区,所需的空间大小取决于快照的使用,所以没有可循的方法来设置此大小
快照是特殊的逻辑卷,只可以对逻辑卷做快照。
- 实例:
- lvcreate --size 500M -n lvbak --snapshot /dev/vgname/lvname
- /dev/vgname/lvname:原始逻辑卷
- /dev/vg0/lvbak:备份逻辑卷
- 执行lvdisplay或lvscan命令查看逻辑信息
4.ssm命令(system-storage=manager)
- 安装:
- yum -y install system-storage-manager
- 实例:
- 使用 sd{b…d} 创建vg0/lv1 并格式化为 xfs 挂载到 /media/lv1
- ssm create -s 400M -n lv0 -p vg0 --fstype xfs /dev/sd{b…d} /media/lv0
- 使用 sd{b…d} 创建vg0/lv1 并格式化为 xfs 挂载到 /media/lv1
- 删除LVM卷:
- ssm remove
- 删除存储池:
- ssm remove
五、 ISCSI网络存储器
1. 简介
ISCSI技术是一种由IBM、Cisco公司研究开发的,是一个供硬件设备使用的可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速千兆以太网上进行路由选择
-
技术优点和成本优势主要体现以下方面:
硬件成本低:构建iSCSI存储网络,除了存储设备外,交换机、线缆、接口卡都是标准的以太网配件,价格相对来说比较低廉。 操作简单,维护方便:对iSCSI存储网络的管理,实际上就是对以太网设备的管理。 扩充性强:对于已经构建的iSCSI存储网络来说,增加iSCSI存储设备和服务器都将变得简单且无需改变网络的体系结构。 带宽和性能:iSCSI存储网络的访问带宽依赖以太网带宽。随着千兆以太网的普及和万兆以太网的应用,iSCSI存储网络会达到甚至超过FC(FiberChannel,光纤通道)存储网络的带宽和性能。
2. 基本概念
-
在SAN中,主机一般都是Initiator,存储设备则是Target。
- Initiator
- SCSI会话的发起方
- 向Target请求LUN,并将数据的读写指令发送给Target。
- Target(默认采用TCP 3260端口)
- 接受SCSI回话的一方
- 它接收来自Initiator的指令,为Initiator提供LUN,并实现对LUN的读写
- IQN: iqn.2020-11.com.redhat:737db83a23df
- 全球唯一名称,用于以强制命令格式来识别启动器和目标
- iqn :表示此名称将使用域作为其标识符
- yyyy-mm :拥有域名的第一个月
- com.redhat 逆向域名
- optional_string :以冒号为前缀的可选字符串,根据需要分配
- Initiator
-
Linux主要的开源Target项目
- Linux SCSI Target-STGT/tgt
- Linux-IO Target - LIO Linux 2.6.38开始纳入内核
- SCST-Generic SCSI Subsystem for linux
-
Linux-IO Target概述
- Linux-IO Target在Linux内核中,用软件实现各种SCSI Target
- **前端:**FC、FCoE、iSCSI、1394、USB、vHost等
- **后端:**SATA, SAS, SCSI, SSD, FLASH, DVD, USB, ramdisk等
- 架构:
- 支持SSE4.2高性能、多线程
- 支持x86, ia64, Alpha, Cell, PPC, ARM, MIPS等多种CPU
- 支持高可用、负载平衡群集
3. ISCSI实现网络存储
3.1 服务端
-
事先准备好两个逻辑卷作为ISCSI的存储设备。
-
**首先安装target:**yum install targetd targetcli -y
-
启动服务:
- systemctl start target
- systemctl enable target
- systemctl start target
-
设置防火墙:
-
systemctl stop firewalld
-
**关闭selinux:**setenforce 0
-
执行targetcli工具:
-
-
targetcli
- **帮助:**help
- 基本思路:
- 先把准备共享的块做出来,创建一个target,在target上创建LUN,一个LUN连接一个块
- 创建块即给要发布的逻辑卷起个名字
- cd /backstores/block
- create server:disk01 /dev/vg0/lv0
- 创建 iqn 名字即创建ISCSI对象
- cd /iscsi
- create iqn.2020-11.com.shengzhe:disk01
- 设置ACL即将ISCSI对象与客户端IP或主机名绑定
- cd /iscsi/iqn.2020-11.com.shengzhe:disk01/tpg1/acls
- create iqn.2020-11.com.shengzhe.linux01
- 创建LUN并绑定块
- cd /iscsi/iqn.2020-11.com.shengzhe:disk01/tpg1/luns/
- create /backstores/block/server:disk01
3.2 客户端
- 基本步骤:
- 安装软件
- yum install -y iscsi-initiator-utils
- initiator 起个名字
- vim /etc/iscsi/initiatorname.iscsi
- InitiatorName=iqn.2020-11.com.shengzhe:linux01
- vim /etc/iscsi/initiatorname.iscsi
- 启动服务
- systemctl enable iscsi;
- systemctl start iscsi
- 发现存储
- iscsiadm --mode discoverydb --type sendtargets --portal 192.168.119.136 --discove
- 登陆存储
- iscsiadm --mode node --targetname iqn.2020-11.com.shengzhe:disk01 --portal 192.168.119.136:3260 --login
- 其他命令
- iscsiadm -m discovery [-P 1|0] :显示有关已发现目标的信息
- iscsiadm -m node [-P 1|0] :显示有关已知目标的信息
- iscsiadm -m session [-P 1|0] :显示有关活动回话的信息
- 安装软件