Linux文件系统

冯诺依曼在1945年提出计算机的五大组成部分
运算器:CPU
控制器:CPU
存储器:内存和硬盘
输入设备:鼠标、硬盘
输出设备:显示器

一、硬盘结构

机械硬盘结构

Linux文件系统原理_文件系统

  1. 扇区:硬盘的最小存储单位,大小为512字节
  2. 磁道:由扇区组成的园
  3. 柱面:多扇片下,所有盘片的同一磁道组成的
固态硬盘结构

固态硬盘的特点

固态硬盘,使用固态电子芯片阵列而制成的硬盘,由控制单元和存储单元组成

特点:读写快、噪音低、防震、轻薄,有写入次数限制,容量较小、价格高

在固态硬盘中,为了便于理解,有逻辑上的磁道、扇区的概念

二、Centos6 下的ext4文件系统

1.磁盘使用流程
对硬盘进行分区
格式化指定文件系统
挂载使用

分区:MBR与GPT

MBR分区方式

  • 主引导记录 是位于磁盘最前边的一段引导代码
  • 主引导程序 占用了446byte
  • 分区表 占用了64byte,16标识一个分区
  • 有效标识符占用了2byte,标记MBR是否有效

GPT分区方式

  • 现存系统最大支持128个主分区
  • 最大支持18EB分区
  • 提供分区表的冗余
  • 实现分区表备份与安全
2.使用虚拟机进行MBR分区

1.关机添加硬盘

2.查看是否添加成功 ls /dev/sda

3.使用fdisk+设备文件名进行分区

#进入分区界面
[root@localhost ~]# fdisk /dev/sda1
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0xd4897b23 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):

fdisk交互页面中可用选项有

m:寻求帮助

d:删除分区

l:显示分区类型

n:新建分区

p:显示分区表信息

q:不保存退出

t:修改分区id,l可查看

w:保存并退出

3.格式化与挂载

Linux文件系统原理_文件系统_02

super block:超级块,记录每个分区的block的大小、数量

inode表:用来快速搜索磁盘上的索引节点

data block:数据块,保存真实数据的位置,block的大小和数量在格式化成文件系统已经固定,除非重新格式化,否则不能修改。

单个文件占用小于一个block的大小时,单独占用一个block,剩余空间不会被利用。

inode:i节点,记录inode号、权限、属主属组、时间戳、大小、占了那几个block。

3.1 查看使用的扇区
fdisk -l 设备文件
[root@localhost ~]# fdisk -l

磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000b1fe4

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1050623      524288   83  Linux
/dev/sda2         1050624    41943039    20446208   8e  Linux LVM
3.2 查看分区情况
fdisk -l 设备文件  查看分区情况

[root@localhost ~]# fdisk -l /dev/sdb1

磁盘 /dev/sdb1:3221 MB, 3221225472 字节,6291456 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
3.3 格式化:
命令格式:mkfs.文件系统类型 磁盘路径

[root@localhost ~]# mkfs.xfs /dev/sdb2
3.4 挂载
命令格式:mount -t 文件系统类型 路径 挂载点

补充:df -h 查看已挂载的磁盘空间使用情况
	df -i 查看已挂载的inode号
3.5 永久挂载
blkid 查询UUID
选择需要挂载的分区,复制到/etc/fstab

[root@localhost ~]# blkid
/dev/sda1: UUID="c198eb8b-f5d7-4dd1-9083-dc4168a9588d" TYPE="xfs" 
/dev/sda2: UUID="xCaOvp-L9To-Obc9-5BLe-d9ES-vncR-Iz9pqm" TYPE="LVM2_member" 
/dev/sdb1: UUID="371168b5-8eaf-4ddc-b26a-9e283ea06181" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="333657ff-e432-4b66-bca9-9201ce9f726c" 
/dev/sr0: UUID="2018-11-25-23-54-16-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 

/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=c198eb8b-f5d7-4dd1-9083-dc4168a9588d /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
UUID=371168b5-8eaf-4ddc-b26a-9e283ea06181 /root/disk1 xfs defaults  0 0
3.6 查看UUID
1.dumpe2fs -h 分区设备名

2.ls -l /dev/disk/by-uuid/
[root@localhost ~]# ls -l /dev/disk/by-uuid/
总用量 0
lrwxrwxrwx. 1 root root 10 5月  14 04:29 131eb8b0-a1b4-47d0-9d94-c2571c083711 -> ../../dm-1

3.查看分区文件系统:df -T

补充命令:

partprode:将磁盘分区变化信息通知内核,请求操作系统重新加载分区表
	-s:显示磁盘分区汇总信息
	-h:显示帮助信息
	
fack:文件系统修复
格式:fack -y 分区名

三、Centos 7下的XFS文件系统

XFS每个单个文件系统量最大支持8eb,单个文件可以支持16tb。

XFS是一个适合高容量磁盘与 巨型文件的文件系统

1.XFS组成部分

XFS文件系统在数据的分布上主要分为三部分:

数据区(data section)

文件系统活动登录区(log section)

实时运行区(realtime section)

2.XFS文件系统相关查询命令
df -t #查看已经挂载分区的文件系统类型

xfs_info 挂载点/设备文件名 #查看已挂载XFS文件系统元数据信息命令

blkid #列出设备的UUID等参数

lsblk #查看设备详细信息
[root@localhost ~]# lsblk /dev/sdb2
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb2   8:18   0   2G  0 part [SWAP]
[root@localhost ~]# lsblk 
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0  512M  0 part /boot
└─sda2            8:2    0 19.5G  0 part 
  ├─centos-root 253:0    0 18.5G  0 lvm  /
  └─centos-swap 253:1    0    1G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
├─sdb1            8:17   0    2G  0 part [SWAP]
└─sdb2            8:18   0    2G  0 part [SWAP]
sr0              11:0    1 1024M  0 rom  
[root@localhost ~]#
3.磁盘分区
GPT分区表
命令格式:gdisk 设备文件完整路径 

#分区完成后,可以通过查看/proc/partitions来确定分区是否修改成功

partprode -s #更新Linux内核的分区表信息
4.磁盘格式化
mkfs.xfs 创建xfs文件系统
[root@localhost ~]# mkfs.xfs /dev/sdb1
5.文件系统挂载

挂载:mount

选项
	-a:根据/etc/fstab文件,将所有磁盘进行挂载
	-t:指定文件系统类型来进行挂载
	-o:挂载特殊选项
6.开机自动挂载

开机自动挂载需要写入配置文件/etc/fstab

/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=866208a7-b3a2-4998-b20a-4c8dc6ecd0dc /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0

第一列:磁盘设备文件名或UUID

第二列:挂载点

第三列:磁盘分区的文件系统

第四列:文件系统参数

async/sync(异步、同步)

设置磁盘是否以异步方式运行,默认异步(性能较佳)

auto/noauto

自动、手动,默认文件系统自动挂载

rw/ro

读写、只读,设置磁盘以读写或者只读运行

exec/noexec

执行、不执行。限制文件系统可执行操作

suid/nosuid

该文件系统是否允许SUID权限存在

defaults

同时拥有rw、suid、dev、exec、suto、async等功能

第五列:能否被dump备份(0:不备份,1:每天备份,5不定期备份)

第六列:是否以fsck检验扇区

补充命令
stat:文件名、文件大小、占用block数量、单个block大小、所在设备编号、inode号、硬链接数、权限、属主属组、访问时间、数据修改时间、状态修改时间

[root@localhost ~]# stat .cshrc 
  文件:".cshrc"
  大小:100       	块:8          IO 块:4096   普通文件
设备:fd00h/64768d	Inode:33942934    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:system_u:object_r:admin_home_t:s0
最近访问:2013-12-29 10:26:31.000000000 +0800
最近更改:2013-12-29 10:26:31.000000000 +0800
最近改动:2024-04-22 22:46:36.028008307 +0800
创建时间:-
cat:改变访问时间
vim:改变数据修改时间
chmod、chown:权限的变动改变状态修改时间
[root@localhost ~]#
命令格式:du 目录或分区挂载点
命令选项:
-a:列出目录下所有子文件和子目录占用空间大小(默认列出子目录)。
-h:以常见单位显示目录大小。
-s:递归式显示目录下所有子文件子目录占用总空间。

挂载的三种方式

临时挂载:mount
永久挂载:vim  /etc/fstab
mount -a:重新挂载/etc/fstab
扩展swap分区

swap指的是交换分区(swap space),它是磁盘上的一块区域,可以是一个分区,也可以是一个文件,或者是两者的组合。

1.修改分区ID
[root@localhost ~]# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): n
Partition number (3-128, default 3): 
First sector (34-41943006, default = 8390656) or {+-}size{KMGTP}: 
Last sector (8390656-41943006, default = 41943006) or {+-}size{KMGTP}: +2G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8200
Changed type of partition to 'Linux swap'

Command (? for help): p
Disk /dev/sdb: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 68E53DD4-EB72-44D6-A891-EC8367BDD529
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 29360061 sectors (14.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         4196351   2.0 GiB     8200  Linux swap
   2         4196352         8390655   2.0 GiB     8200  Linux swap
   3         8390656        12584959   2.0 GiB     8200  Linux swap
#8200是Centos7中的swap的默认systemID 
Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdb.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.

	2.mkswap /dev/sdb3  #swap格式化
	3.swapon  /dev/sdb3  #开启设备
	  swapoff /dev/sdb3  #关闭设备
	4.free -k -m -g -h   #查看swap情况
[root@localhost ~]# free -k  #以kb显示swap大小
              total        used        free      shared  buff/cache   available
Mem:         995892      664036       68396       26972      263460      101380
Swap:       5242868       21768     5221100
[root@localhost ~]# free -g  #以gb显示swap大小
              total        used        free      shared  buff/cache   available
Mem:              0           0           0           0           0           0
Swap:             4           0           4
[root@localhost ~]# free -m  #以mb显示swap大小
              total        used        free      shared  buff/cache   available
Mem:            972         648          66          26         257          99
Swap:          5119          21        5098
[root@localhost ~]# free -h    #以常见单位显示swap大小
              total        used        free      shared  buff/cache   available
Mem:           972M        648M         66M         26M        257M         99M
Swap:          5.0G         21M        5.0G
[root@localhost ~]#

ble
Mem: 972 648 66 26 257 99
Swap: 5119 21 5098
[root@localhost ~]# free -h #以常见单位显示swap大小
total used free shared buff/cache available
Mem: 972M 648M 66M 26M 257M 99M
Swap: 5.0G 21M 5.0G
[root@localhost ~]#

注:fdsik命令可以在centos6、7版本使用,gdisk在centos7可以使用,如果需要在centos6使用yum安装即可