学习记录的笔记,虽然毫无章法
硬盘基础知识
磁盘的物理组成
- 如下图所示:
- 有关磁盘物理知识的详细介绍请看硬盘的存储原理和内部架构这篇博文
硬盘接口类型
- IDE
- SATA
- SCSI
- SAS
- 光纤通道
IDE(Integrated Drive Electronic,电子集成驱动器)
- 用途:家用+部分服务器
- 特点:价格低、兼容性强
- 传输模式:PIODMAUDMA
- 如下图所示:
SATA(Serial Advanced Technology Attachment,串行高级技术附件)
- 用途:PC机主流趋势
- 特点:可以对传输指令进行检查,具备自动纠错能力。
- 如下图所示:
SCSI(Small Computer System Interface,小型计算机系统接口)
- 用途:服务器
- 特点:应用范围广、多任务、带宽大、CPU占用率低、热插拔
- 如下图所示:
SAS(Serial Attached SCSI,串行连接SCSI接口,串行连接小型计算机系统接口)
- 介绍:新一代的SCSI的技术
- 用途:服务器
- 特点:改善存储系统的效能、可用性和扩充性,与SATA硬盘的兼容性
- 如下图所示:
光纤通道(Fiber Channel)
- 用途:专门为网络系统设计的接口技术
- 特点:热插拔性、高速带宽、远程连接、连接设备数量大等
- 如下图所示:
硬盘种类
- SSD
- HHD
- HDD
SSD(Solid State Drive,固态硬盘)
- 优点:读写速度快;防震抗摔性;低功耗;无噪音;工作温度范围大;轻便
- 缺点:容量小;寿命有限;售价高
HHD(hybrid hard drive,混合硬盘)
- 优点:
1. 系统启动时间减少
2. 功耗降低
3. 生成热量减少
4. 硬盘寿命延长
5. 笔记本和PAD的电池寿命延长
6. 工作噪声级别降低 - 缺点:
1. 硬盘中数据的寻道时间更长
2. 硬盘的自旋变化更频繁
3. 闪存模块处理失败,不可能进行其中的数据恢复
4. 系统的硬件总成本更高
HDD(Hard Disk Drive,传统硬盘)
- 优点:略
- 缺点:略
磁盘分区
磁盘分区类型
- MBR
- GPT
MBR
第一分区
- 开机管理程序(Bootloader)(512bytes,开机记录区[446bytes]+存放表[64bytes])
- 例如/dev/sda[1,2,3,4]
主分区、延伸分区
- 四个主分区或延伸分区
逻辑分区
- 由延伸分区继续分割出的分区
- 下标从5开始,如/dev/sda[5,...]
- 分区的最小单位是:柱面
总结
- 主分区与延伸分区最多可以有四笔(磁盘的限制);
- 延伸分区最多只能有一个;
- 逻辑分区是由延伸分区持续切割出來的分割槽;
- 能够被格式化后,作为资料存取的分割槽为主分区与逻辑分区。延伸分区無法格式化;
- 逻辑分区的数量因操作系统而不同,在Linux系统中SATA硬盘已经可以突破63个以上的分割限制。
GPT
- 以LBA(Logical Block Address)分区
- LBA默认扇区大小为512bytes,目前有4K大的扇区
- 前34个LBA(即LBA(0~33))记录分区信息表,最后33个LBA用来备份分区信息,如下图所示:
- LBA0:开机管理程序+GPT分区标识
- LBA1:分区表位置、大小、备份GPT分区位置、分区表检验机制码(CRC32)
- LBA2~LBA32:记录分区信息处
- 从LBA2开始:每个LBA可以记录4笔分区记录,4*32=128笔。512bytes=128bytes(分区)+相关信息+64bytes(记录开始/结束扇区号码)
开机启动程序
文件系统
磁盘格式
- Windows98之前: FAT (或 FAT16)
- Window2000之后:NTFS
- Linux:Ext2(正统文件系统)
相关概念
- superblock:記錄此 filesystem 的整體資訊,包括inode/block的總量、使用量、剩餘量, 以及檔案系統的格式與相關資訊等;
- inode:記錄檔案的屬性,一個檔案佔用一個inode,同時記錄此檔案的資料所在的 block 號碼;
- block:實際記錄檔案的內容,若檔案太大時,會佔用多個 block 。[目录block记录了该目录下文件名和inode编号]
分类
- 索引式文件系统
- 日志式文件系统
Ext2文件系统介绍
- Ext2格式化后如下图所示:
block group下内容介绍
data block
- 原則上,block 的大小與數量在格式化完就不能夠再改變了(除非重新格式化);
- 每個 block 內最多只能夠放置一個檔案的資料;
- 承上,如果檔案大於 block 的大小,則一個檔案會佔用多個 block 數量;
- 承上,若檔案小於 block ,則該 block 的剩餘容量就不能夠再被使用了(磁碟空間會浪費)
inode table
inode存放内容
- 該檔案的存取模式(read/write/excute);
- 該檔案的擁有者與群組(owner/group);
- 該檔案的容量;
- 該檔案建立或狀態改變的時間(ctime);
- 最近一次的讀取時間(atime);
- 最近修改的時間(mtime);
- 定義檔案特性的旗標(flag),如 SetUID...;
- 該檔案真正內容的指向 (pointer);
总结
- 每個 inode 大小均固定為 128 bytes (新的 ext4 與 xfs 可設定到 256 bytes);
- 每個檔案都僅會佔用一個 inode 而已;
- 承上,因此檔案系統能夠建立的檔案數量與 inode 的數量有關;
- 系統讀取檔案時需要先找到 inode,並分析 inode 所記錄的權限與使用者是否符合,若符合才能夠開始實際讀取 block 的內容。
- inode记录一个block编号需要4bytes
思考:如果一个文件有400M,假设默认block大小为1K,磁盘是如何读取这个文件的?
inode 記錄 block 號碼的區域定義為12個直接,一個間接, 一個雙間接與一個三間接記錄區
12个直接: 121K = 12K;1个间接:(1K/4bytes)1K = 256K;1个双间接:((1K/4bytes)^2)1K = (2562)K;1个三间接:(((1K/4bytes)2)256)1K = (256^3)K; 12 + 256 + 256256 + 256256256 (K) = 16GB
- 2K,4K不能这么计算,因为会受到Ext2文件系统的限制
Superblock(1024bytes)
- block 與 inode 的總量;
- 未使用與已使用的 inode / block 數量;
- block 與 inode 的大小 (block 為 1, 2, 4K,inode 為 128bytes 或 256bytes);
- filesystem 的掛載時間、最近一次寫入資料的時間、最近一次檢驗磁碟 (fsck) 的時間等檔案系統的相關資訊;
- 一個 valid bit 數值,若此檔案系統已被掛載,則 valid bit 為 0 ,若未被掛載,則 valid bit 為 1 。
Filesystem Description
描述每個 block group 的開始與結束的 block 號碼,以及說明每個區段 (superblock, bitmap, inodemap, data block) 分別介於哪一個 block 號碼之間
block bitmap
未使用中,使用中,空的
inode bitmap
記錄使用與未使用的 inode 號碼
创建一个文件的流程
- 先確定使用者對於欲新增檔案的目錄是否具有 w 與 x 的權限,若有的話才能新增;
- 根據 inode bitmap 找到沒有使用的 inode 號碼,並將新檔案的權限/屬性寫入;
- 根據 block bitmap 找到沒有使用中的 block 號碼,並將實際的資料寫入 block 中,且更新 inode 的 block 指向資料;
- 將剛剛寫入的 inode 與 block 資料同步更新 inode bitmap 與 block bitmap,並更新 superblock 的內容。
问题:写入文件时,第三步执行完毕后,突然断电了,该怎么解决?
<table>
<tr>
<td>1.索引式文件系统</td>
<td>2.日志式文件系统</td>
</tr>
</table>
XFS文件系统介绍
- 資料區 (data section)
- 一個檔案系統活動登錄區 (log section)
- 即時運作區 (realtime section)
资料区
- inode/data block/superblock
登录区
即时运作区
命令xfs_info
类似 ext家族的 dumpe2fs命令
磁盘分区、格式化
分区类型
- 查看设备列表
lsblk
- 查看设备唯一号
blkid
- 查看文件系统分区类型
parted device_name print
分区工具
gdisk
:xfs分区fdisk
:ext分区parted
:两者都可以
格式化
- xfs分区:
mkfs.xfs
- Ext4分区:
mkfs.ext4
- 通用:
mkfs -t
mkfs -t vfat /dev/sda5 | mkfs -t ext2 /dev/sda5 |
检验文件系统
- xfs:
xfs_repair dev_name
- ext4:
fsck.ext4 dev_name