我们知道当我们买来一块硬盘时,必须要对他进行分区和格式化才可以
MBR(主引导扇区) :位于磁盘的第一个扇区,即0号扇区,主要由引导程序、分区表、结束标志三部分构成,总共占512字节。
1.引导程序:占MBR扇区前446字节。计算机在上电完成BIOS自检后,执行此引导程序,引导程序首先会在分区表中查找活动分区,若存在活动分区,则根据活动分区的偏移量找到该活动分区上的引导扇区的地址,并将该引导扇区加载到内存中,同时检查该引导扇区的有效性,然后根据该引导扇区的规则去引导操作系统
2.分区表:占64字节,
标记一个分区就要消耗16字节,所以一块磁盘最多4个分区。
每个分区项通过位置偏移、分区大小来唯一确定一个主分区或者扩展分区, 定位各个分区,访问用户数据。
每个分区项包括引导标识、起始和结束位置的CHS参数、分区类型、开始扇区、分区大小等
3.结束标志:占扇区最后2字节。每次执行系统引导代码时都会检查MBR主引导扇区最后2字节是否是"55 AA",若是,则继续执行后续的程序,否则,则认为这是一个无效的MBR引导扇区,停止引导系统。
从左向右依次为 boot sector 。super block。inode。block。
block:存储数据的地方。对系统进行格式化后,block会被分成许多block块,每个块默认4k(可改)。一个文件可以占用多个块。注意:就算文件1k,也独自占用一个快。
inode: 包含好多inode,每一个inode也有编号。存放文件的属性信息(可以说,一个inode就代表了一个文件,inode结构体保存了文件的大小,创建时间,文件的块大小等各种参数)以及此文件被存放在了哪一些block块中。
每记录一个文件,消耗128B。
super block :记录block inode 信息:用了多少block inode 等以及剩了多少。
boot sector :引导扇区(引导程序)
×××系统找文件时:先到inode中找文件在那些块里,然后再到指定block块中找。
如果一个分区太大 ,就会把一个分区分成好多block group
然后原来的一个分区结构就变成了 boot sector ,block group,block group…
**
从左往右依次为 : super block ,文件系统描述,block快位图,inode位图,inode表,block;
super block:记录多少block被使用 多少没被使用。
文件系统描述:记录这个block group是从哪一个block开始,哪一个block结束的。
block 快位图 : 记录具体哪些block被使用,哪些block没被使用。
inode位图:记录哪些inode被使用,哪些没被使用。
inode表:每写入一个文件,都保存这个文件的属性,占哪些block,以及文件所属组等。
刚才说到,记录一个文件 inode消耗128B。 其中每指向一个block块inode消耗4B,128/4=32 。所以每一个inode最多指向32个block块。 又因为每个块存放4k,所以一个文件最大128K。
但现实生活中一个文件很大,远远超过了128K,这是怎么实现的那?
***原来在inode区 ,从上往下分成了直接区,间接区,二级间接区,三级间接区。***
直接区:这里inode指向的block块 是真正存储文件的,所以这里的每个inode最多指向32个块,最多存128K的文件
间接区:比如这里inode还是指向32个块,但其中指向的每一个块中存放的并不是文件,而是像inode一样指向其他块。
一个块4k,其中每指向一个快消耗4B。所以一个由inode直接指向的块又指向了1024个块(真正存信息)。可以算出实际的存储空间了。
二级间接区 三级间接区一样的原理
写入文件时 :
步骤一:首先到inode位图里面找哪一个inode没有被使用,然后在inode中把这个文件的属性信息写入。
步骤二:查找block位图,查看哪个block没有被使用,然后写入信息到块中
步骤三:更新block快位图和inode位图, 最后更新superblock;
日志:
其中执行每一步的时候,均被记录到了日志中。
如果没执行完就关机,下次开机的时候,查看日志,把下面的步骤做完。
Linux磁盘管理好坏直接关系到整个系统的性能问题。
Linux磁盘管理常用三个命令为df、du和fdisk
df:列出文件系统的整体磁盘使用量
du:检查磁盘空间使用量
fdisk:用于磁盘分区
df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息,
注意:必须是已经挂载的
语法:
df [参数] [目录或文件名]
常用参数:
-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
-k :以 KBytes 的容量显示各文件系统;
-m :以 MBytes 的容量显示各文件系统;
sss@sss-PC:~$ df
文件系统 1K-块 已用 可用 已用% 挂载点
udev 8057924 0 8057924 0% /dev
tmpfs 1617276 1784 1615492 1% /run
/dev/nvme0n1p5 92365480 13709536 73921020 16% /
tmpfs 8086364 288456 7797908 4% /dev/shm
tmpfs 5120 4 5116 1% /run/lock
tmpfs 8086364 0 8086364 0% /sys/fs/cgroup
/dev/nvme0n1p1 262144 59276 202868 23% /boot/efi
tmpfs 1617272 36 1617236 1% /run/user/1000
/dev/nvme0n1p6 467656 134740 297940 32% /media/sss/16d8a5a7-8368-4cda-aedd-dcc360273a06
/dev/nvme0n1p4 715781116 24491956 691289160 4% /media/sss/Data
/dev/nvme0n1p3 104857596 56458040 48399556 54% /media/sss/Windows-SSD
/dev/nvme0n1p8 42440492 3167896 37086972 8% /media/sss/ff90f1d3-680b-43ae-8486-81e6af926cbb
以容易读的方式
sss@sss-PC:~$ df -h
文件系统 容量 已用 可用 已用% 挂载点
udev 7.7G 0 7.7G 0% /dev
tmpfs 1.6G 1.8M 1.6G 1% /run
/dev/nvme0n1p5 89G 14G 71G 16% /
tmpfs 7.8G 282M 7.5G 4% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
/dev/nvme0n1p1 256M 58M 199M 23% /boot/efi
tmpfs 1.6G 36K 1.6G 1% /run/user/1000
/dev/nvme0n1p6 457M 132M 291M 32% /media/sss/16d8a5a7-8368-4cda-aedd-dcc360273a06
/dev/nvme0n1p4 683G 24G 660G 4% /media/sss/Data
/dev/nvme0n1p3 100G 54G 47G 54% /media/sss/Windows-SSD
/dev/nvme0n1p8 41G 3.1G 36G 8% /media/sss/ff90f1d3-680b-43ae-8486-81e6af926cbb
将系统内的所有特殊文件格式及名称都列出来:
sss@sss-PC:~$ df -aT
文件系统 类型 1K-块 已用 可用 已用% 挂载点
sysfs sysfs 0 0 0 - /sys
proc proc 0 0 0 - /proc
udev devtmpfs 8057924 0 8057924 0% /dev
devpts devpts 0 0 0 - /dev/pts
tmpfs tmpfs 1617276 1784 1615492 1% /run
/dev/nvme0n1p5 ext4 92365480 13709512 73921044 16% /
securityfs securityfs 0 0 0 - /sys/kernel/security
tmpfs tmpfs 8086364 288380 7797984 4% /dev/shm
tmpfs tmpfs 5120 4 5116 1% /run/lock
tmpfs tmpfs 8086364 0 8086364 0% /sys/fs/cgroup
cgroup cgroup 0 0 0 - /sys/fs/cgroup/systemd
pstore pstore 0 0 0 - /sys/fs/pstore
efivarfs efivarfs 0 0 0 - /sys/firmware/efi/efivars
cgroup cgroup 0 0 0 - /sys/fs/cgroup/perf_event
cgroup cgroup 0 0 0 - /sys/fs/cgroup/hugetlb
cgroup cgroup 0 0 0 - /sys/fs/cgroup/net_cls,net_prio
cgroup cgroup 0 0 0 - /sys/fs/cgroup/cpu,cpuacct
cgroup cgroup 0 0 0 - /sys/fs/cgroup/devices
cgroup cgroup 0 0 0 - /sys/fs/cgroup/cpuset
cgroup cgroup 0 0 0 - /sys/fs/cgroup/pids
cgroup cgroup 0 0 0 - /sys/fs/cgroup/blkio
cgroup cgroup 0 0 0 - /sys/fs/cgroup/memory
cgroup cgroup 0 0 0 - /sys/fs/cgroup/freezer
cgroup cgroup 0 0 0 - /sys/fs/cgroup/rdma
systemd-1 - - - - - /proc/sys/fs/binfmt_misc
mqueue mqueue 0 0 0 - /dev/mqueue
debugfs debugfs 0 0 0 - /sys/kernel/debug
hugetlbfs hugetlbfs 0 0 0 - /dev/hugepages
binfmt_misc binfmt_misc 0 0 0 - /proc/sys/fs/binfmt_misc
configfs configfs 0 0 0 - /sys/kernel/config
fusectl fusectl 0 0 0 - /sys/fs/fuse/connections
/dev/nvme0n1p1 vfat 262144 59276 202868 23% /boot/efi
tmpfs tmpfs 1617272 36 1617236 1% /run/user/1000
gvfsd-fuse fuse.gvfsd-fuse 0 0 0 - /run/user/1000/gvfs
/dev/nvme0n1p6 ext4 467656 134740 297940 32% /media/sss/16d8a5a7-8368-4cda-aedd-dcc360273a06
/dev/nvme0n1p4 fuseblk 715781116 24491956 691289160 4% /media/sss/Data
/dev/nvme0n1p3 fuseblk 104857596 56458040 48399556 54% /media/sss/Windows-SSD
/dev/nvme0n1p8 ext4 42440492 3167896 37086972 8% /media/sss/ff90f1d3-680b-43ae-8486-81e6af926cbb
将 /etc 底下的可用的磁盘容量以易读的容量格式显示
sss@sss-PC:~$ df -h /etc
文件系统 容量 已用 可用 已用% 挂载点
/dev/nvme0n1p5 89G 14G 71G 16% /
fdisk 是 Linux 的磁盘分区表操作工具。
fdisk [-l] 装置名称
-l :输出后面接的装置所有的分区内容。若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜寻到的装置的分区均列出来。
fdisk -l:
列出所有分区信息(注意:不是root时,应用sudo命令)
sss@sss-PC:~$ sudo fdisk -l
Disk /dev/nvme0n1: 953.9 GiB, 1024209543168 bytes, 2000409264 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
Disklabel type: gpt
Disk identifier: F2F573BF-8901-4FCD-BC51-4DF1EB774616
Device Start End Sectors Size Type
/dev/nvme0n1p1 2048 534527 532480 260M EFI System
/dev/nvme0n1p2 534528 567295 32768 16M Microsoft reserved
/dev/nvme0n1p3 567296 210282495 209715200 100G Microsoft basic data
/dev/nvme0n1p4 210282496 1641844735 1431562240 682.6G Microsoft basic data
/dev/nvme0n1p5 1641844736 1830586367 188741632 90G Microsoft basic data
/dev/nvme0n1p6 1830588416 1831587839 999424 488M Linux filesystem
/dev/nvme0n1p7 1831587840 1911588863 80001024 38.2G Linux filesystem
/dev/nvme0n1p8 1911588864 1998360575 86771712 41.4G Linux filesystem
/dev/nvme0n1p9 1998360576 2000408575 2048000 1000M Windows recovery environment
fdisk分区
找出你系统中的根目录所在磁盘,并查阅该硬盘内的相关信息:
[root@www ~]# df / <==注意:重点在找出磁盘文件名而已
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hdc2 9920624 3823168 5585388 41% /
[root@www ~]# fdisk /dev/hdc <==仔细看,不要加上数字喔!
The number of cylinders for this disk is set to 5005.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
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 <==删除一个partition
l list known partition types
m print this menu
n add a new partition <==新增一个partition
o create a new empty DOS partition table
p print the partition table <==在屏幕上显示分割表
q quit without saving changes <==不储存离开fdisk程序
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)
离开 fdisk 时按下 q,那么所有的动作都不会生效!相反的, 按下w就是动作生效的意思:
(谨慎操作,之前博主学习的时候就因为这个命令导致系统崩溃,只能重装系统,不过也挺简单)
Command (m for help): p <== 这里可以输出目前磁盘的状态
Disk /dev/hdc: 41.1 GB, 41174138880 bytes <==这个磁盘的文件名与容量
255 heads, 63 sectors/track, 5005 cylinders <==磁头、扇区与磁柱大小
Units = cylinders of 16065 * 512 = 8225280 bytes <==每个磁柱的大小
Device Boot Start End Blocks Id System
/dev/hdc1 * 1 13 104391 83 Linux
/dev/hdc2 14 1288 10241437+ 83 Linux
/dev/hdc3 1289 1925 5116702+ 83 Linux
/dev/hdc4 1926 5005 24740100 5 Extended
/dev/hdc5 1926 2052 1020096 82 Linux swap / Solaris
# 装置文件名 启动区否 开始磁柱 结束磁柱 1K大小容量 磁盘分区槽内的系统
Command (m for help): q
注意:分区之后要更新分区表
命令:
partprobe /dev/hdc
单独partprobe:更新全部分区表;
之前提到 产生一个新分区是不能直接使用的,要对她进行格式化:
格式化命令:
mkfs [-t 文件系统格式] 装置文件名
-t :可以接文件系统格式,例如 ext3, ext2, vfat 等(系统有支持才会生效)
例1:
查看 mkfs 支持的文件格式
root@www ~]# mkfs[tab][tab]
mkfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.msdos mkfs.vfat
例2:
将分区 /dev/hdc6(可指定你自己的分区) 格式化为 ext3 文件系统:
[root@www ~]# mkfs -t ext3 /dev/hdc6
mke2fs 1.39 (29-May-2006)
Filesystem label= <==这里指的是分割槽的名称(label)
OS type: Linux
Block size=4096 (log=2) <==block 的大小配置为 4K
Fragment size=4096 (log=2)
251392 inodes, 502023 blocks <==由此配置决定的inode/block数量
25101 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=515899392
16 block groups
32768 blocks per group, 32768 fragments per group
15712 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Writing inode tables: done
Creating journal (8192 blocks): done <==有日志记录
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
# 这样就创建起来我们所需要的 Ext3 文件系统了!简单明了!
Linux 的磁盘挂载使用 mount 命令,卸载使用 umount 命令。
mount命令格式:
mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n] 装置文件名 挂载点
实例 1
用默认的方式,将刚刚创建的 /dev/hdc6 挂载到 /mnt/hdc6 上面!
[root@www ~]# mkdir /mnt/hdc6
[root@www ~]# mount /dev/hdc6 /mnt/hdc6
[root@www ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
.....中间省略.....
/dev/hdc6 1976312 42072 1833836 3% /mnt/hdc6
磁盘卸载命令 umount 语法:
umount [-fn] 装置文件名或挂载点
选项与参数:
-f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下;
-n :不升级 /etc/mtab 情况下卸除。
卸载/dev/hdc6
实例2
[root@www ~]# umount /dev/hdc6