前言
机械硬盘:磁性碟片存储数据
扇区:大小固定——512Byte——磁盘最小存储单位
磁道:逻辑结构,最外侧0号磁道
磁盘大小:磁头数*柱面数*扇区数*每个扇区的大小
IDE硬盘接口:ATA硬盘或者PATA硬盘 理论上133MB/S
SATA硬盘接口:理论上600MB/S
SCSI接口:服务器使用 理论值320MB/S
固态硬盘:闪存颗粒存储数据(主控+颗粒)
丢弃了机械硬盘的物理结构,具有低功耗、无噪声、抗震动、低散热、体积小,读写速度快的特点;价格贵,寿命有限。
分区:隔断(分组)硬盘空间
- MBR(master boot record):兼容windows磁盘的分区方式,物理容量<2T使用
GPT(GUID partition table):物理容量>2T使用,不存在primary partition and logic partition 这个些分区概念了
- logical block address[LAB]
格式化:规划和写入文件系统(在硬盘中打入隔断并贴上标签)
data block【数据块——block】:记录文件数据,大小(1KB、2KB,默认是4KB)和数量在格式化后就已经决定了,不能改变,除非重新格式化,每个
block保存只能保存一个文件的数据,如果文件小于一个block块,那么这个block块剩余的空间不能被其它文件占用;如果文件大于1个block块
则需要多占用几个block块,Windows中的磁盘碎片整理工具就是把多个block块尽量整合到一起,加快读/写速度
inode【i节点,索引】:记录文件属性;每个文件需要占用一个inode
分类:
1、ext2、ext3、ext4
2、fat16、fat32
3、NTFS——需要重新编译内核
一、硬盘分区类型
- 主分区:最多能分4个
- 扩展分区:只能有一个,类属于主分区;不能存储数据和格式化,必须进行二次划分为逻辑分区才能使用
- 逻辑分区:IDE硬盘——50个逻辑分区;SCSI硬盘——11个逻辑分区
- “sd”:SCSI或者SATA硬盘;
- “hd”:IDE硬盘;
- “1~4”:主分区或者扩展分区
- “5~59”:逻辑分区,一定是从/dev/sda5开始计算的
- Linux所有的存储设备都需要挂载才能使用,(swap分区系统直接调用,不需要挂载)
- 挂载:分区和挂载点建立联系
硬盘设备是由大量的扇区组成的,每个扇区的容量为512字节。其中第一个扇区最重要,它里面保存着主引导记录与分区表信息。主引导记录需要占用446字节,分区表为64字节,结束符占用2字节;其中分区表中每记录一个分区信息就需要16字节,这样一来最多只有4个分区信息可以写到第一个扇区中,这4个分区就是4个主分区
扩展分区并不是一个真正的分区,更像是一个占用16字节分区表空间的指针—一个指向另外一个分区的指针,这种指针结构将形成一个单向链表。这样一来,用户一般会选择使用3个主分区加1个扩展分区的方法,然后在扩展分区中创建出多个逻辑分区,从而来满足多分区(大于4个)的需求
一切从“/”开始
1、Windows操作系统中,想要找到一个文件,要依次进入该文件所在的磁盘分区(假设这里是D盘),然后在进入该分区下的具体目录,最终找到这个文件
2、Linux系统中的一切文件都是从“根(/)”目录开始的,并按照文件系统层次化标准(FHS—,Filesystem Hierarchy Standard[约定大于配置])采用树形结构来存放文件,并且定义了常见目录的用途
Linux系统中常见的目录名称以及相应内容
目录名称 应放置文件的内容
/boot 开机所需文件—内核、开机菜单以及所需配置文件等
/dev 以文件形式存放任何设备与接口
/etc 配置文件
/home 用户主目录
/bin 存放单用户模式下还可以操作的[命令]
/lib 开机时用到的函数库,以及/bin与/sbin下面的命令要调用的函数
/sbin 开机过程中需要的命令
/media 用于挂载设备文件的目录
/opt 放置第三方软件
/root 系统管理员的家目录
/srv 一些网络服务的数据文件目录
/tmp 任何人均可使用的“共享”临时目录
/proc (内存映射)虚拟文件系统,例如系统内核、进程、外部设备及网络状态等
/usr/local 用户自行安装的软件
/usr/sbin Linux系统开机时不会使用到的软件/命令/[脚本]
/usr/share 帮助与说明文件,也可放置共享文件
/var 主要存放经常变化的文件,如日志
/lost+found 当文件系统发生错误时,将一些丢失的文件片段存放在这里
物理设备
Linux系统中一切都是文件,硬件设备也不例外。系统内核中的udev设备管理器会自动把硬件名称规范起来,目的是让用户通过设备文件的名字可以猜出设备大致的属性以及分区信息等;。同时,udev设备管理器的服务会一直以守护进程的形式运行并侦听内核发出的信号来管理/dev目录下的设备文件。
常见的硬件设备及其文件名称
硬件设备 文件名称
IDE设备 /dev/hd[a-d]
SCSI/SATA/U盘 /dev/sd[a-p]
软驱 /dev/fd[0-1]
打印机 /dev/lp[0-15]
光驱 /dev/cdrom
鼠标 /dev/mouse
磁带机 /dev/st0或/dev/ht0
PS:现在的IDE设备已经很少见了,所以一般的硬盘设备都会是以“/dev/sd”开头的。而一台主机上可以有多块硬盘,因此系统采用a~p来代表16块不同的硬盘(默认从a开始分配)
a:系统中同类接口中第一个被识别到的设备
5:这个设备是一个逻辑分区。
知识盲区说明
1、/dev/sda表示主板上第一个插槽上的存储设备
/dev目录中sda设备之所以是a,并不是由插槽决定的,而是由系统内核的识别顺序来决定的,而恰巧很多主板的插槽顺序就是系统内核的识别顺序,因此才会被命名为/dev/sda。在使用iSCSI网络存储设备时就会发现,明明主板上第二个插槽是空着的,但系统却能识别到/dev/sdb这个设备就是这个道理。
2、分区的编号代表分区的个数。比如sda3表示这是设备上的第三个分区
分区的数字编码不一定是强制顺延下来的,也有可能是手工指定的。因此sda3只能表示是编号为3的分区,而不能判断sda设备上已经存在了3个分区
文件系统与数据资料
- 文件系统的作用:合理规划硬盘,保证用户正常的使用需求
Ext3:日志文件系统,能够在系统异常宕机时避免文件系统资料丢失,并能自动修复数据的不一致与错误。然而,当硬盘容量较大时,所需的修复时间也会很长,而且也不能百分之百地保证资料不会丢失。它会把整个磁盘的每个写入动作的细节都预先记录下来,以便在发生异常宕机后能回溯追踪到被中断的部分,然后尝试进行修复。
Ext4:Ext3的改进版本,作为RHEL 6系统中的默认文件管理系统,它支持的存储容量高达1EB(1EB=1,073,741,824GB),且能够有无限多的子目录。另外,Ext4文件系统能够批量分配block块,从而极大地提高了读写效率。
XFS:高性能日志文件系统,而且是RHEL 7中默认的文件管理系统,它的优势在发生意外宕机后尤其明显,即可以快速地恢复可能被破坏的文件,而且强大的日志功能只用花费极低的计算和存储性能。并且它最大可支持的存储容量为18EB,这几乎满足了所有需求。
科普小知识
硬盘需要保存的数据太多,因此Linux系统中有一个名为super block的“硬盘地图”。Linux并不是把文件内容直接写入到这个“硬盘地图”里面,而是在里面记录着整个文件系统的信息。如果把所有的文件内容都写入到这里面,它的体积将变得非常大,而且文件内容的查询与写入速度也会变得很慢。Linux只是把每个文件的权限与属性记录在inode中,而且每个文件占用一个独立的inode表格,该表格的大小默认为128字节
该文件的访问权限(read、write、execute);
该文件的所有者与所属组(owner、group);
该文件的大小(size);
该文件的创建或内容修改时间(ctime);
该文件的最后一次访问时间(atime);
该文件的修改时间(mtime);
文件的特殊权限(SUID、SGID、SBIT);
该文件的真实数据地址(point)。
文件的实际内容则保存在block块中(大小可以是1KB、2KB或4KB),一个inode的默认大小仅为128B(Ext3),记录一个block则消耗4B。当文件的inode被写满后,Linux系统会自动分配出一个block块,专门用于像inode那样记录其他block块的信息,这样把各个block块的内容串到一起,就能够让用户读到完整的文件内容了。对于存储文件内容的block块,有下面两种常见情况(以4KB的block大小为例进行说明)
情况1:文件很小(1KB),但依然会占用一个block,因此会潜在地浪费3KB。
情况2:文件很大(5KB),那么会占用两个block(5KB-4KB后剩下的1KB也要占用一个block)
磁盘容量配额
root管理员使用磁盘容量配额服务来限制某位用户或某个用户组针对特定文件夹可以使用的最大硬盘空间或最大文件个数,一旦达到这个最大值就不再允许继续使用。可以使用quota命令进行磁盘容量配额管理,从而限制用户的硬盘可用容量或所能创建的最大文件个数。quota命令还有软限制和硬限制的功能
软限制:当达到软限制时会提示用户,但仍允许用户在限定的额度内继续使用。
硬限制:当达到硬限制时会提示用户,且强制终止用户的操作。
RHEL 7系统中已经安装了quota磁盘容量配额服务程序包,但存储设备却默认没有开启对quota的支持,此时需要手动编辑配置文件,RHEL 6系统使用的是usrquota参数,RHEL 7系统使用的是uquota参数。
vim /etc/fstab #打开磁盘配置文件
mount | grep boot #检查是否支持容量配额服务
软硬链接
**硬链接(hard link):**可以将它理解为一个“指向原始文件inode的指针”,系统不为它分配独立的inode和文件。所以,硬链接文件与原始文件其实是同一个文件,只是名字不同。每添加一个硬链接,该文件的inode连接数就会增加1;而且只有当该文件的inode连接数为0时,才算彻底将它删除。换言之,由于硬链接实际上是指向原文件inode的指针,因此即便原始文件被删除,依然可以通过硬链接文件来访问。注意:不能跨分区对目录文件进行链接。
**软链接(也称为符号链接[symbolic link]):**仅仅包含所链接文件的路径名,因此能链接目录文件,也可以跨越文件系统进行链接。但是,当原始文件被删除后,链接文件也将失效与Windows系统中的“快捷方式”类似。
交换分区
SWAP(交换)分区是一种通过在硬盘中预先划分一定的空间,然后将把内存中暂时不常用的数据临时存放到硬盘中,腾出物理内存空间让更活跃的程序服务来使用,目的是为了解决真实物理内存不足的问题。但由于交换分区毕竟是通过硬盘设备读写数据的,速度肯定要比物理内存慢,所以只有当真实的物理内存耗尽后才会调用交换分区的资源。在生产环境中,交换分区的大小一般为真实物理内存的1.5~2倍
df #文件系统信息
df -ahT #特殊文件系统,这些文件保存在内存中,如/proc。因为是挂载在内存中,所以占用量都是0
h:单位不再是KB
T:文件系统类型
du #统计目录或者文件所占用磁盘空间大小命令;“ls -l”查看目录大小大多数是4KB,因为目录下的子目录和子文件名是保存到父目录的block(默认是4KB)如果父目录的子目录和子文件并不多,
一个block就能放下,那么这个父目录就占用一个block
du -a #统计当前目录的总大小,同时统计当前目录下所有的子文件和子目录磁盘占用量大小,默认单位是KB
du与df的区别:
1、df从文件系统角度考虑,通过文件系统中未分配的空间来确定已经分配的空间大小,既要考虑文件占用空间,又要统计被命令或程序占用的空间(文件已经删除,空间未释放)
2、du从文件角度考虑,只会计算文件或者目录占用的磁盘空间,因此,df统计的分区更准确
挂载命令mount和卸载命令umount
1、使用空目录作为挂载点,如果使用已有的数据目录作为挂载点,则原目录的数据就查找不到了