在计算机的组成中,实际上有CPU和内存,就可以独立地完成计算任务了,但是,内存中数据断电后就丢失了,无法储存相关数据,于是就有了外部存储器来弥补内存的不足,例如:磁盘、光驱等。
磁盘相对于内存(RAM)而言,属于低速设备,所以它通过总线连接至南桥芯片上与CPU进行通信。
硬盘接口有多种类型,不同类型的通信速率不一样,作为计算机的存储设备,当然存储器设备的速率越高越好,随着工艺、材料、技术水平的不断提升,以及相关应用领域的需要,产生了各种各样的接口类型。
串口通信类:一根线缆只能连接一个设备
(1) SATA(Serial Advanced Technology Attachment)
目前最常见的硬盘接口类型,即所谓的“串口硬盘”,其传输速率在3.0版本上峰值数据为6gbps,如下图,其主要通过TX和RX两根数据线进行数据传输。相对于ATA和IDE而言,
主要优点在于传输速率快,传输线缆少,距离远,功耗低,在机箱内部更容易布线等等,但比较容易损坏,不适用于企业的大容量使用。
(2)SAS(Serial Attached SCSI)
新一代的SCSI技术,为了改善存储系统的效能,可用性和扩充性,向下兼容SATA接口。通信速率高达6Gbps。第三代则高达12gbps,和SATA相比,主要在差异在协议层。但是,相比于SATA接口,SAS深受企业级用户的青睐,主要因为
(1) 基于SCSI指令集和双核处理器的设计,使其性能更优,而SATA为单核处理器控制
(2)支持全双工模式传输,而STAT只支持半双工
(3)提供两个分开的SAS端口用于数据传输,实现更高的可靠性,即一路出现故障,自动切换至另一路,称为“双通道故障切换”
(4)采用I/O errorDetection(IOEDC)技术可同时校验数据和位置,并纠正读和写操作中的数据错误,更能满足用户复杂的数据完整性与数据保护要求,而SATA只能进行数据内容的校验。
功能强大,也意味着成本的升高,所以相对于STAT接口的硬盘,SAS接口的硬盘价格更高。对于一些经济型服务器数据存储,企业级的SATA硬盘也是一种比较合理的解决方案。
(3)USB
多用于移动硬盘的使用,通信速率usb3.0是625mb/s
并口通信类:一根线缆可连接多个设备
(1)SCSI(small computer system interface,小型计算机系统接口)
支持多个设备,还允许一个设备传输数据的同时,另一设备进行数据查找,在多任务操作系统中,能获得更高的性能,且占用CPU利用率低,它有多种接口规格,比较常见的ultra-320,通信速率320mb/s,ultra-640,通信速率640mb/s
(2)IDE(Intergrated Drive Electronics,集成设备电路)
也称为ATA(Advanced Technology Attachment)接口,早期的硬盘接口,使用一个40pin电缆与主板进行连接,最初的设计只能支持两个硬盘,最大容量也被限制在504MB内,且传输速度慢,133mb/s左右,随着其他接口技术的发展,已被逐步淘汰。
磁盘命名
不同接口类型的磁盘,在计算机中名字会有些差异,可在/dev查看到对应的磁盘名字。
IDE接口:/dev/hd[a-z]
SATA,SCSI,SAS,USB接口:/dev/sd[a-z]
[a-z]用于区分多个硬盘,每个硬盘都要自己的编号。
根据其硬件的结构和工艺模型,主要分两大类:机械硬盘和固态硬盘。
机械硬盘:(HDD,Hardware Disk Drive)
顾名思义,机械硬盘,内部除了存储数据的“媒介”——磁盘盘片,主要为马达、机械臂、磁头等组成的机械结构。
基于以上这种硬件机械机构,主要有如下一些基本概念
(1)磁头
用于对盘片进行读写操作的工具,由线圈缠绕在磁芯上制成,通过电流的变化来改变盘面的磁场分布和感应磁场强度
(2)磁道
当磁盘旋转时,磁头保持在一个位置上,磁头会在盘面上画出一个圆形轨迹,这些圆形轨迹称为磁道。肉眼不可见,仅是盘面已特殊方式磁化了的一些磁化区。
(3)扇区
盘面上的每个磁道被划分为若干个弧段,这些弧段称为扇区。
(4)柱面
硬盘通常由重叠的一组盘片构成,每个盘面都被划分为数目相等的磁道,并从外缘的“0”开始编号,具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面。
(5)簇
存储文件分配的最小单位
平均寻道时间: 可以作为评判一个硬盘的性能
一分钟盘面由多少转,其快慢作为评判硬盘性能的一个指标。比如5400rpm,7200rpm,10000rpm。
寻址方式
LBA(Logic Block Address)寻址方式,为每个扇区分配逻辑地址,以扇区分单位进行寻址,每个扇区的大小一般为512bytes。
固态硬盘:(SSD,Solid State Drive)
主要由固态电子存储芯片阵列而支持的硬盘,速度快,读速度达到400M/s,写速度也可达到130M/s以上,读写速度是普通机械硬盘的3-5倍,其优点还有很多,比如不容易损坏,功耗低,噪音小等,但价格较贵。
不同
有了硬盘,但是不能直接拿来供计算机使用,还需要对其进行分区和创建文件系统,俗称“格式化”,只有经历上面两个步骤才能正常被我们的计算机识别和使用。
分区就是使用分区编辑器将一个硬盘的若干个扇区进行分组,划分成几个独立的逻辑部分,不同类的目录或文件可以存储至不同的分区中,不同的分区也可以有不同的文件系统,这样,就可以更有针对性的将文件分的更细。
就好比一个图书馆,划分出不同的区域,用于存放不同领域的书籍一样,区域由若干个书架组成。
分区命名:
前面有提到,每个硬盘都有自己的编号,而每个硬盘在分区后,每个分区也有自己的名字。
sda[a-z][1-n]:[1-n]即为分区的编号,主分区
例如:sda1,:表示名字为sda这个硬盘的第1分区
不要把所有的鸡蛋放在一个篮子里
(1)为了方便用户的使用
(2)有效保护系统盘空间,划分出一块独立的分区专门供系统使用,同时,将这块区域保护起来
(3)提高系统运行效率,特别对于机械硬盘,需要控制机械臂的磁头和马达的转动来定位磁道,文件太分散,会导致机械臂移动过于频繁而降低效率,优秀的分区,可以减少这种移动时间,提高读取效率。
根据机械硬盘的物理结构,所有磁头都是一起运动的,当机械臂定位时,能同时操作到多个盘面,基于这种机械设计,通过柱面来划分区域,可以最大量的减少机械臂来回移动的时间,提高效率,减少损伤;而盘面都是同心圆,外侧磁道单位时间内磁头划过的区域更大,所以外侧磁道的读取速度要比内侧的要快。
每个柱面只能属于一个分区,而每个柱面都有其起始结束的扇区,因此分区就是将这些扇区编号划分成不同的组,每个区都有自己的起始扇区编号和结束扇区编号。
而要知道硬盘上有哪些分区信息,就通过在硬盘上单独取出一块存储空间,用于存放这些划分的LBA信息,这部分空间,它不属于任何分区。
这部分存储分区信息我们叫做MBR或GPT,MBR存放在第0磁道0扇区(磁头起始位置区域),总共占用1个扇区,512bytes。GPT也是从第0磁道0扇区开始存储的,但是其空间大小是变长的,视具体分区情况而定。
[root@localhost /]# fdisk -l /dev/sda
Disk /dev/sda: 85.9 GB, 85899345920 bytes, 167772160 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: 0x000b32f0
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 167772159 82836480 8e Linux LVM
(2)管理分区
fdisk device
提供一个交互式接口来管理分区,它有许多子命令。
例如
[root@localhost /]# 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): m //查看帮助
Command action //帮助信息
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition //删除一个分区
g create a new empty GPT partition table //创建一个新的空的GPT分区表
G create an IRIX (SGI) partition table
l list known partition types //列举支持的分区类型
m print this menu //打印帮助信息
n add a new partition //增加一个新的分区
o create a new empty DOS partition table //创建一个新的空的DOS分区表
p print the partition table //打印当前磁盘的分区信息
q quit without saving changes //不保存退出
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit //保存并退出
x extra functionality (experts only)
Command (m for help): p //打印当前磁盘的分区信息
Disk /dev/sda: 85.9 GB, 85899345920 bytes, 167772160 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: 0x000b32f0
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 167772159 82836480 8e Linux LVM
Command (m for help): n //创建新的分区
Partition type:
p primary (2 primary, 0 extended, 2 free) //主分区,总共能建4个,还有2个可用
e extended //创建扩展分区
Select (default p): p //选择创建主分区
Partition number (3,4, default 3): 3 //选择主分区号
No free sectors available //由于我这里磁盘已全部分完,无多余的空间使用,所以提示无可用的扇区
Command (m for help): d //为了练习,我这里暂时将sda2删除(注意,这里操作只是在内存中进行,在没有键入“w”之前是不会存储,正常情况下是不能将sda2删除的,因为这里存储的是linux的根文件目录)
Partition number (1,2, default 2): 2 //删除sda2
Partition 2 is deleted //提示sda2已被删除
Command (m for help): p //查看当前分区信息
Disk /dev/sda: 85.9 GB, 85899345920 bytes, 167772160 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: 0x000b32f0
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
//已经没有sda2了
Command (m for help): n //创建新的分区
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
Partition number (2-4, default 2): 3
First sector (2099200-167772159, default 2099200): //输入分区的起始扇区,直接敲回车,表示默认
Using default value 2099200
Last sector, +sectors or +size{K,M,G} (2099200-167772159, default 167772159): //输入分区的结束扇区,直接敲回车,表示默认
Using default value 167772159
Partition 3 of type Linux and of size 79 GiB is set //创建分区成功
Command (m for help):w //保存退出,q,不保存退出
这里要注意:在已经分区并且挂其中某个分区的磁盘设备上创建的新分区,内核可能在创建完成后无法直接识别。
查看分区信息:cat /proc/partitions
这时查不到刚刚创建的分区,而需要通知内核强制重读磁盘分区表:
partx -a [device]
kpartx -af [device]
一次不行两次,两次不行,那就执行reboot,再查看分区信息。
文件系统是一种储存和组织数据的方法。将储存设备使用的数据块地址抽象出来,形成一张目录表,计算机通过查找这张目录表,再到指定位置去读取、修改、删除或写入实际的文件数据。
文件系统中存在两种数据:
(1)元数据
描述数据的数据,实际上我们可以简单的把它理解为“目录”。但是它和我们的常见的目录又有差异。
它包含了文件的属性信息(文件大小、权限、属主、属组、时间戳、数据块指针)。
寻找具体的数据时,需要在元数据区根据文件名找到对应的数据块地址指针,才能找到具体的文件。
(2)数据
真正存储数据的地方。
但是,它们在实际磁盘中不是完全以这两种形式存放的。
分区划分成3个部分:
①超级块(super block):它属于元数据范畴。
它是一个整个分区的全局的信息表,是系统为文件分配存储空间、回收存储空间的依据。
它是分区中第一个要访问的地方。
主要存储
文件系统的存在,就是为了方便CPU能够高效的访问和查找数据,从而提供系统性能。
文件系统使得用户在存取数据时,不用关心其存储的具体数据块的物理地址,只需要通过调用文件系统对外提供的API(open,read,write等),就可以实现文件的访问和查找,具体的储存空间分配和释放由文件系统自动进行管理。
linux文件系统分类:
常用的linux文件系统:ext2(无日志),ext3(可带日志),ext4(可带日志),xfs(企业级的64位文件系统),relserfs,btrfs(目前尚处于测试实验阶段)
光盘: iso9660
网络文件系统: nfs,cifs
集群文件系统: gfs2,ocfs2
内核级分布式文件系统: ceph
Windows的文件系统: vfat,ntfs
伪文件系统: proc,sysfs,tmpfs,hugepagefs
unix文件系统: ufs,ffs,jfs
交换文件系统: swap,从硬盘划分空间,当作内存使用,
使用相应算法(比如lru),将内存中不是经常使用的数据转存至swap中,以腾出空间供其他当前需要进行工作的进程使用,待这部分数据需要使用时,再从swap中取出放到内存中,将其他不经常使用的数据转存至swap中,如此重复。
用户空间的分布式文件系统: mogilefs,moosefs,glusterfs
虚拟文件系统:VFS(Virtual File System),linux通过vfs,来识别和支持不同的文件系统,使它对上层提供统一接口,对下兼容各种不同类型的文件系统,它属于一个中间件。
注意:windows无法识别Linux的文件系统,因此,存储设备需要在两种设备交叉使用时,应该使用Linux和windows都支持的文件系统:FATFS32(VFAT)
文件系统的驱动由内核提供,文件系统的管理工具由用户空间的应用程序提供。
(1)创建文件系统
mkfs
mkfs.ext2,mkfs.ext3,mkfs.ext4,mkfs.xfs,mkfs.vfat,……创建不同类型的文件系统
ext系列文件系统创建工具:
mkfs.ext# [options] devices:#表示2-4
mkfs -t ext# [options] devices:指定文件系统类型
mke2fs [options] devices:ext系列专用的文件系统管理工具
options:
-t{ext2|ext3|ext4}
-b{1024|2048|3096}:指定文件系统块大小
LABEL:指明卷标
-j:创建有日志功能的文件系统 ext3
-i #:bytes per inode,指明inode与字节的比例,每个inode对应一个具体的文件
-N #:直接指明要给此文件系统创建的inode的数量
-m #:指定预留空间百分比,#表示百分比,4即为4%
-O[^] FEATURE:以指定的特性创建目标文件系统
devices
磁盘名称,例如:/dev/sda,/dev/sdb等等
mkswap [options] device
创建swap文件系统,参数与mkfs参数一致
启用交换分区:swapon
swapon [options] [device]
-a:定义在/etc/fstab中的所有设备
禁用交换分区:swapoff
swapoff device
device 分区号。例如/dev/sda3
(2)检测及修复文件系统的工具
fsck [option] [filesystem] :check and repair a linux filesystem
fsck.ext2,fsck.ext3
用于实现文件系统检测的工具
因进程意外终止或系统崩溃等原因导致写入定稿操作非正常终止时,可能会造成文件损坏,此时,应该检测并修复文件系统,建议离线运行
option
-t :fstype
-a:自动修复错误
-r:交互式修复错误
filesystem
filesys can be a device name (e.g. /dev/hdc1, /dev/sdb2), a mount
point (e.g. /, /usr, /home), or an ext2 label or UUID specifier (e.g. UUID=8868abf6-88c5-4a83-98b8-bfc24057f7bd or LABEL=root)
e2fsck [options] device:ext系列文件系统专用检测工具
options
-y:对所有问题自动回答yes
-f:即使文件系统处于clean状态,也执行扫描
(3)文件系统属性查看及修改工具
e2label:卷标的查看与设定
查看:e2label device
设定:e2label device label
tune2fs:查看或修改ext系列文件系统的某些属性
-l:查看超级块的内容 修改指定文件系统的属性:
-j:ext2->ext3文件系统转换
-m #:调整预留百分比
-O [^] FEATURE:调整特性
dumpe2fs:显示ext系列文件系统的属性信息
dumpe2fs [-h] device
blkid:查看文件系统类型
blkid -L LABEL:根据LABEL定位设备
blkid -U UUID:根据UUID定位设备
(4)文件系统的挂载
根文件系统外的其他文件系统(或分区)想要被访问,必须通过“关联”至根文件系统上的某个目录,内核才能访问此文件系统,这个关联就叫做“挂载”,关联的目录即为“挂载点”。
挂载点:mount point,用于作为另一个文件系统的访问入口,要成为挂载点,必须
①事先存在
②应该使用未被或不会被其他进程使用到的目录
③挂载点下原有的文件将会被隐藏
**挂载命令:mount **
mount [-nrw] [-t vfstype] [-o options] devices mount_point
-r:readonly,只读挂载
-w:read and write读写挂载
-n:默认情况下,设备挂载或卸载的操作会同步更新至/etc/mtab文件中,-n用于禁止此特性
-t vfstype:指明要挂在的设备上的文件系统类型,多数情况下课省略,此时mount会通过blkid来判断要挂载的设备的文件系统类型
-o options:挂载选项
sync/async:同步/异步操作
atime/noatime:文件或目录在被访问时是否更新其访问时间戳
diratime/nodiratime:目录在被访问时是否更新其访问时间戳
remount:重新挂载
acl:支持使用facl功能
ro:只读
rw:读写
dev/nodev:此设备否允许创建设备文件
exec/noexec:是否允许此设备上的程序文件
user/nouser:是否允许普通用户挂载文件
defaults:rw,suid,dev,exec,auto,nouser,async and relatetime
例如:
mount -r /dev/cdrom mount_point
如需设定开机挂载,则需要修改配置文件 /etc/fstab
#
# /etc/fstab
# Created by anaconda on Mon Mar 25 17:50:02 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
#要挂载的设备 挂载点 文件系统类型 挂载选项 存储频率 自检次序
/dev/mapper/centos-root / xfs defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
(1) 要挂载的设备 设备文件;
LABEL:
UUID:
伪文件系统:如sysfs,proc,tmpfs
(2) 挂载点:swap类型的设备的挂载点为swap
(3) 文件系统类型
(4) 挂载选项
defaults:使用默认挂载选项,如果有多个,使用逗号(,)分隔
(5) 存储频率 0:从不备份 1:每天备份 2:每隔一天备份
(6) 自检次序 0:不自检 1:首先自检,通常只能是根文件系统可用1 2:次级自检
umount devices|mount_point
注意:正在被进程访问的挂载点无法被卸载
查看哪个或哪些进程所占用
(1) lsof mount_point
(2) fuser -v mount_point
终止所有正在被访问某挂载点的进程
(1) fuser -km mount_point
(4)查看文件系统磁盘信息
df(disk free):report file system disk space usage
df [option]… [file]…
-h:human readable
-l:仅显示本地文件的相关信息,例如包含网络设备
-i:显示inode的 使用状态而非blocks
du(disk used):estimate file space usage
df [option]… [file]…
-s:summary总数
-h:human readable