一、硬盘结构
1、硬盘的逻辑结构
硬盘的大小是使用“磁头数×柱面数×扇区数×每个扇区的大小”这样的公式来计算的。其中磁头数(Heads)表示硬盘总共有几个磁头,也可以理解成为硬盘有几个盘面,然后乘以二;柱面数 (Cylinders)表示硬盘每一面盘片有几条磁道;扇区数(Sectors)表示每条磁道上有几个扇区;每个扇区的大小一般为 512Byte。扇区也是磁盘的最小存贮单位。
2、硬盘接口
- IDE 硬盘接口(Integrated Drive Electronics,并口,即电子集成驱动器)也称作“ATA 硬盘” 或“PATA 硬盘”,是早期机械硬盘的主要接口,ATA133 硬盘的理论速度可以达到 133MB/s (此速度为理论平均值)。
- SATA 接口(Serial ATA,串口)是速度更高的硬盘标准,具备了更高的传输速度,并具备了更强的纠错能力。目前已经是 SATA 三代,理论传输速度达到 600MB/s(此速度为理论平均值)
- SCSI 接口(Small Computer System Interface,小型计算机系统接口)广泛应用在服务器上, 具有应用范围广、多任务、带宽大、CPU 占用率低及支持热插拔等优点,理论传输速度达到 320MB/s
二、linux文件系统
1. Linux 文件系统的特性
- super block(超级块):记录整个文件系统的信息,包括 block 与 inode 的总量,已经使用的 inode 和 block 的数量,未使用的 inode 和 block 的数量,block 与 inode 的大小,文件系统的挂载时间,最近一次的写入时间,最近一次的磁盘检验时间等。
- date block(数据块,也称作 block):用来实际保存数据的,block 的大小(1KB、2KB 或 4KB)和数量在格式化后就已经决定,不能改变,除非重新格式化。每个 blcok 只能保存一个文件的数据,要是文件数据小于一个 block 块,那么这个 block 的剩余空间不能被其他文件使用,要是文件数据大于一个 block 块,则占用多个 block 块。Windows 中磁盘碎片整理 工具的原理就是把一个文件占用的多个 block 块尽量整理到一起,这样可以加快读写速度。
- inode:用来记录文件的权限(r、w、x),文件的所有者和属 组,文件的大小,文件的状态改变时间(ctime),文件的最近一次读取时间(atime),文件的最近一次修改时间(mtime),文件的数据真正保存的 block 编号。每个文件需要占用一个 inode。
2、常见文件系统
文件系统 | 简介 |
---|---|
ext | Linux 中最早的文件系统,由于在性能和兼容性上具有很多缺陷,现在已经很少使用 |
ext2 | 是 ext 文件系统的升级版本,Red Hat Linux 7.2 版本以前的系统默认都是 ext2 文件 系统。于 1993 年发布,支持最大 16TB 的分区和最大 2TB 的文件 (1TB=1024GB=1024×1024KB) |
ext3 | 是 ext2 文件系统的升级版本,最大的区别就是带日志功能,以便在系统突然停止时 提高文件系统的可靠性。支持最大 16TB 的分区和最大 2TB 的文件 |
ext4 | 是 ext3 文件系统的升级版。ext4 在性能、伸缩性和可靠性方面进行了大量改进。ext4 的变化可以说是翻天覆地的,比如向下兼容 ext3、最大 1EB 文件系统和 16TB 文件、无 限数量子目录、Extents 连续数据块概念、多块分配、延迟分配、持久预分配、快速 FSCK、 日志校验、无日志模式、在线碎片整理、inode 增强、默认启用 barrier 等。它是 CentOS 6.x 的默认文件系统 |
xfs | XFS 最早针对 IRIX 操作系统开发,是一个高性能的日志型文件系统,能够在断电以及 操作系统崩溃的情况下保证文件系统数据的一致性。它是一个 64 位的文件系统,后来 进行开源并且移植到了 Linux 操作系统中,目前 CentOS 7.x 将 XFS+LVM 作为默认的文 件系统。据官方所称,XFS 对于大文件的读写性能较好。 |
swap | swap 是 Linux 中用于交换分区的文件系统(类似于 Windows 中的虚拟内存),当内存 不够用时,使用交换分区暂时替代内存。一般大小为内存的 2 倍,但是不要超过 2GB。 它是 Linux 的必需分区 |
NFS | NFS 是网络文件系统(Network File System)的缩写,是用来实现不同主机之间文件 共享的一种网络服务,本地主机可以通过挂载的方式使用远程共享的资源 |
iso9660 | 光盘的标准文件系统。Linux 要想使用光盘,必须支持 iso9660 文件系统 |
fat | 就是 Windows 下的 fat16 文件系统,在 Linux 中识别为 fat |
vfat | 就是 Windows 下的 fat32 文件系统,在 Linux 中识别为 vfat。支持最大 32GB 的分区 和最大 4GB 的文件 |
NTFS | 就是 Windows 下的 NTFS 文件系统,不过 Linux 默认是不能识别 NTFS 文件系统的,如 果需要识别,则需要重新编译内核才能支持。它比 fat32 文件系统更加安全,速度更快, 支持最大 2TB 的分区和最大 64GB 的文件 |
proc | Linux 中基于内存的虚拟文件系统,用来管理内存存储目录/proc |
sysfs | 和 proc 一样,也是基于内存的虚拟文件系统,用来管理内存存储目录/sysfs |
tmpfs | 也是一种基于内存的虚拟文件系统,不过也可以使用 swap 交换分区 |
三、常用的硬盘管理命令
df 查看分区的使用情况
[root@centos ~]# df -h
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg_centos-lv_root ext4 18G 1.9G 15G 12% /
tmpfs tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 ext4 477M 34M 418M 8% /boot
2、du 统计文件大小
[root@centos ~]# du -h #统计当前文件大小
76K .
3、fsck 文件系统修复命令
[root@centos ~]# fsck -y /dev/sda1 #自动修复/dev/sda1
fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)
/dev/sda1 is mounted.
e2fsck: Cannot continue, aborting.
4、dumpe2fs 显示磁盘状态
[root@centos ~]# dumpe2fs /dev/mapper/vg_centos-lv_root -h
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name: # 卷标名
Last mounted on: / # 挂载目录
Filesystem UUID: 92e4492e-b1a7-4e8b-a82f-09ba6afedc08
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl #挂载参数
Filesystem state: clean #文件系统状态
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 1152816 # inode数量
Block count: 4605952 # block 数量
Reserved block count: 230297
Free blocks: 4027007 # 可使用的block块
Free inodes: 1096540 # 可使用de inode
First block: 0
Block size: 4096 # 一个block数量4096bytes
Fragment size: 4096
......
5、查看文件的详细信息
[root@centos ~]# stat 123.txt
File: `123.txt'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
#文件大小 占用块 系统分区块大小
Device: fd00h/64768d Inode: 924444 Links: 1
#存放文件的设备 inode 号 硬链接数
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
权限 属主 属组
Access: 2019-12-03 10:34:25.644828377 +0800 #访问时间
Modify: 2019-12-03 10:34:25.644828377 +0800 #文件数据修改时间
Change: 2019-12-03 10:34:25.644828377 +0800 #文件状态修改时间
6、判断文件类型
file 文件名 判断文件类型
type 命令名 判断命令类型
四、fdisk 命令手工分区
1 fdisk -l 查看系统所有硬盘及分区
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
.....
2、使用fdisk手工分区,首先需要准备一块新硬盘,虚拟机直接添加即可。
1)进入分区界面
fdisk /dev/sdb
输入 m 获取帮助
a toggle a bootable flag 设置可引导标记
b edit bsd disklabel 编辑 bsd 磁盘标签
c toggle the dos compatibility flag 设置 DOS 操作系统兼容标记
d delete a partition 删除分区
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 新建空白 SUN 磁盘标签
t change a partition's system id 改变一个分区的系统 ID
u change display/entry units 改变显示记录单位
v verify the partition table 验证分区表
w write table to disk and exit 写入分区信息,且退出
x extra functionality (experts only) 附加功能
2)简单分区
# 建立一个主分区
Command (m for help): n #创建新分区
Command action
e extended
p primary partition (1-4)
p #创建分区类型 主分区,或者扩展分区。主分区+扩展分区一共只能有4个。
Partition number (1-4): 1 #选择分区号,这里选择了1,所以该分区名为:sdb1
First cylinder (1-2610, default 1): #起始柱面,默认就行
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +2G #指定分区大小,这里为2G,不带单位为柱面数。
Command (m for help): p #此时在打印分区信息,就可以看到已经分好了的sdb1
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x65072461
Device Boot Start End Blocks Id System
/dev/sdb1 1 262 2104483+ 83 Linux
建立扩展分区
Command (m for help): n
Command action
e extended
p primary partition (1-4)
e
Partition number (1-4): 2
First cylinder (263-2610, default 263):
Using default value 263
Last cylinder, +cylinders or +size{K,M,G} (263-2610, default 2610): #不输入,默认到最后一个柱面,也就是使用全部剩余空间。
Using default value 2610
扩展分区建立完成后不能使用,还需要在扩展分区内建立逻辑分区。
我们来建立逻辑分区,逻辑分区会自动分配id,无需手动输入
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l
First cylinder (263-2610, default 263):
Using default value 263
Last cylinder, +cylinders or +size{K,M,G} (263-2610, default 2610): +5G
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xa080c4f9
Device Boot Start End Blocks Id System
/dev/sdb1 1 262 2104483+ 83 Linux
/dev/sdb2 263 2610 18860310 5 Extended
/dev/sdb5 263 916 5253223+ 83 Linux
按 w 保存退出
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
3 partprobe 强制重读所有分区文件,重新挂载分区文件内所有分区。
这不是分区必须命令,如果没有提示重启,可以不执行,也可以重启系统。
4 格式化
建立文件系统 ext3 是 linux 默认文件系统
mkfs -t ext4 /dev/sdb1
mkfs -t ext4 /dev/sdb5
mkfs 命令非常简单易用,不过是不能调整分区的默认参数的(比如块大小是 4096),这些默认 参数除非特殊情况,否则不需要调整,如果想要调整就需要使用 mke2fs 命令进行重新格式化,
命令 格式如下: [root@localhost ~]# mke2fs [选项] 分区设备文件名
选项:
-t 文件系统: 指定格式化成哪个文件系统,如 ext2,ext3,ext4
-b 字节: 指定 block 块的大小
-i 字节: 指定“字节/inode”的比例,也就是多少个字节分配一个 inode
-j: 建立带有 ext3 日志功能的文件系统
-L 卷标名: 给文件系统设置卷标名,就不使用 e2label 命令设定了
举个例子:
[root@centos ~]# mke2fs -t ext4 -b 4096 /dev/sdb5 # 格式化分区,并指定 block 的大小为 4096字节
5 建立挂载点
linux,只有当分区被挂载才能被使用
[root@centos ~]# mkdir /mnt/sdb1
[root@centos ~]# mkdir /mnt/sdb5
6 挂载
mount /dev/sdb1 /mnt/sdb1
mount /dev/sdb5 /mnt/sdb5
7 查看
[root@centos ~]# cd /mnt/sdb1
[root@centos sdb1]# df . -h
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 2.0G 3.1M 1.9G 1% /mnt/sdb1
8 自动挂载
修改分区自动挂载文件 vim /etc/fstab
/dev/sdb1 /mnt/sdb1 ext4 defaults 1 2
第一列: 设备文件名
第二列 挂载点
第三列 文件系统
第四列 挂载选项
第五列 是否可以被备份 0 不备份 1 每天备份 2 不定期备份
第六列 是否检测磁盘 fsck 0 不检测 1 启动时检测 2 启动后检测
9 测试
重启测试
或者使用 mount -a 重新自动挂载fstab内未挂在设备。
五、手动swap分区
1、并修改为 swap 分区 ID
# 新建一个主分区。
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-2610, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +1G
Command (m for help): t #更改分区类型
Selected partition 1 #选择分区
Hex code (type L to list codes): 82 # 类型id,这里82对应swap类型分区
Changed system type of partition 1 to 82 (Linux swap / Solaris)
Command (m for help): p
Device Boot Start End Blocks Id System
/dev/sdb1 1 132 1060258+ 82 Linux swap / Solaris
2、格式化
[root@centos ~]# mkswap /dev/sdb1
Setting up swapspace version 1, size = 1060252 KiB
no label, UUID=e210e3c6-9ad7-4b33-88b3-74234159c794
3、使用 swap 分区
#先查看系统swap分区大小
[root@centos ~]# free -h
total used free shared buffers cached
Mem: 474M 140M 333M 236K 11M 46M
-/+ buffers/cache: 83M 391M
Swap: 1.9G 0B 1.9G
#启动我们刚才添加的分区
[root@centos ~]# swapon /dev/sdb1
#再次查看
[root@centos ~]# free -h
total used free shared buffers cached
Mem: 474M 141M 333M 236K 11M 46M
-/+ buffers/cache: 83M 390M
Swap: 2.9G 0B 2.9G
4、取消使用
[root@centos ~]# swapoff /dev/sdb1
5、自动挂载
[root@centos ~]# vim /etc/fstab
/dev/sdb1 swap swap defaults 0 0