一、磁盘基础知识
Linux: 一切皆文件 磁盘-块设备文件 b
系统库文件可以调用(与文件相关的): open() read() write() close()
块设备文件: block 存取单位: 块 -> 磁盘
字符设备文件: char 存取段位:字符
设备文件: 关联至一个驱动程序,进而能够与之对应设备进行通信
设备号:
主设备号: 标识设备类型
次设备号: 标识同一类型下的不同设备
磁盘接口类型
并行:
IDE: 133MB/s
SCSI : 640MB/s
串行:
SATA: 6Gbps
SAS: 6Gbps
USB: 480MB/s
磁盘设备命名:
IDE : /dev/hd.
SCSI,SATA,SAS,USB : /dev/sd.
不同设备: a-z
同一设备上的不同分区: 1,2,3...
分区方式:
MBR(默认方式):使用32位表示扇区数,分区不超过2T,按柱面进行分区,
4个主分区:3个主分区+1扩展分区(N多逻辑分区)
GPT:支持128个分区,使用64位,使用128UUID表示磁盘和分区,GPT分区表
能够自动备份头尾两份
分区管理命令:
分区管理命令: fdisk(建议)| parted
fdisk和parted区分: fdisk所有在操作只有最后进行保存才生效;parted每执行的操作都立即生效
fdisk命令:
对于一块硬盘来说最多管理15个分区
[root@test ~]# fdisk --help
fdisk: invalid option -- '-'
Usage:
fdisk [options] <disk> change partition table 编辑某块磁盘的分区
fdisk [options] -l <disk> list partition table(s) 列出某块磁盘的分区表
fdisk -s <partition> give partition size(s) in blocks 查看某个分区的block大小
- fdisk <device>
子命令:
d delete a partition # 删除分区
g create a new empty GPT partition table # 创建新分区(分区格式:GPT)
l list known partition types # 列出所有分区类型及其ID号
n add a new partition # 创建新分区
p print the partition table # 打印分区表
q quit without saving changes # 直接退出
t change a partition’s system id # 改变指定分区的分区类型
w write table to disk and exit # 保存并退出
parted命令
[root@test ~]# parted --help
Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]
COMMAND
mklabel,mktable LABEL-TYPE create a new disklabel 创建新磁盘标签(改变分区格式)
print [devices|free|list,all|NUMBER] display the partition table 打印分区列表
mkpart PART-TYPE [FS-TYPE] START END make a partition 创建新分区
rm NUMBER delete partition NUMBER 删除指定分区
[root@test ~]# parted /dev/sdb mkpart primary 2 10M
查看分区:
查看内核中是否已经识别到新的分区:
[root@test ~]# cat /proc/partitions
通知内核重新获取磁盘分区表:
[root@test ~]# partx -a /dev/<device>
[root@test ~]# partprobe [/dev/device]
步骤
添加磁盘 --> 磁盘格式化(选择分区格式)–> 分区 --> 通知内核重新获取磁盘分区
—> 文件系统格式化 —> 挂载
二、文件系统介绍及管理
文件系统基础知识
文件系统: 简单理解成数据存储在硬盘上的组织方式
Linux文件系统:ext2 ext3 ext4 xfs btrfs …
swap: 交换分区
光盘: iso9660
Windows: fat32 nfs …
Unix: FFS UFS …
网络文件系统: NFS CIFS
集群文件系统: GFS2 OCFS2
分布式文件系统: Ceph GlusterFS…
- 根据是否支持"journal"功能
日志型文件系统:ext3 ext4 xfs btrfs
非日志型文件系统: ext2 vfat
文件系统的组成部分:
内核中的模块: ext2/3/4 xfs …
用户空间的管理命令: mkfs ext4 xfs mkfs.vfat …
Linux虚拟文件系统: VFS (/proc/ 虚拟文件系统: 查看系统内核相关参数及属性信息)
文件系统管理
管理命令:mkfs / mkfs2fs /mkswap
mkfs命令:
[root@test ~]# mkfs -h
Usage:
mkfs [options] [-t <type>] [fs-options] <device> [<size>]
-t <type> : 指定文件系统类型
<device> : 指定分区
FS_TYPE: (支持的文件系统类型:) ext4 xfs btrfs vfat …
其他写法:等同于-t指定文件系统类型
[root@test ~]# mkfs
mkfs mkfs.cramfs mkfs.ext3 mkfs.minix
mkfs.btrfs mkfs.ext2 mkfs.ext4 mkfs.xfs
格式化/dev/sdb1;其文件系统为:ext4
[root@test ~]# mkfs -t ext4 /dev/sdb1
mke2fs命令:ext系列文件系统专用管理工具
[root@test ~]# mke2fs --help
常用参数:
-t <FS_TYPE> : 指定文件系统类型
-b [1024|2048|4096] : 指定block数
-L ‘Label’
-j : 相当于 -t ext3
-I # : 为数据空间中每#字节创建inode;此大小不应该小于block数的大小
-N # : 为数据空间创建#个inode
-m # : 为管理人员预留的空间占据的百分比
-O Feature... : 启用指定特性
-O ^Feature... : 关闭指定特性
mkswap命令:创建交换分区
常用方法:
mkswap device
-L “Label”
如果想要创建swap分区: 提前需要调整分区类型为swap(ID=82)
blkid命令:查看块设备属性信息
Usage:
blkid -L
e2label命令: 管理ext系列文件系统的LABEL
[root@test ~]# blkid /dev/sdb1
/dev/sdb1: UUID="45136d17-4ce6-4c03-aebc-076821b408ca" TYPE="ext4"
[root@test ~]# blkid -i /dev/sdb1
DEVNAME=/dev/sdb1
MINIMUM_IO_SIZE=512
PHYSICAL_SECTOR_SIZE=512
LOGICAL_SECTOR_SIZE=512
[root@test ~]# blkid -p /dev/sdb1
文件系统检测工具: fsck , e2fsck
fsck命令: 检测文件系统
常用方法:
fsck.FS_TYPE
fsck -t <FS_TYPE>
-a : 自动修复错误
-r : 交互式修复错误
Note: FS_TYPE 一定要与分区上已经的文件系统类型相同
e2fsck命令: ext系列文件专用的检测工具
-y : 自动回答为yes
-f : 强制修复
三、文件系统挂载及管理
挂载:将一个设备(通常是存储设备)挂载一个已经存在的目录上,我们要访问存储
设备中的文件,必须将文件所在的分区挂载到一个已存在的目录上,然后通过
访问这个目录来访问存储设备
卸载: 解除挂载的关联关系
Note: 挂载点下的原有文件在挂载完成之后都被临时隐藏(挂载点选用空目录)
- 挂载: mount命令
mount: 显示当前系统已经挂载的所有设备
[root@test ~]# mount --help
Usage:
mount [-lhV]
mount -a [options]
mount [options] [--source] <source> | [--target] <directory>
mount [options] <source> <directory>
mount <operation> <mountpoint> [<target>]
<source: device>: 指明要挂载的设备
(1) 设备文件: 例如: /dev/sdb1
(2) 卷标: -L "Label"
(3) UUID
(3) 伪文件系统名称: proc | sysfs | configfs
<directory>: 挂载点
事先存在;建议使用空目录
常用选项:
-t fs_type: 指定要挂载的设备上的文件系统类型
-r :readonly 只读形式挂载
-w :读写形式挂载
-n : 不更新/etc/mtab
-a :自动挂载所有支持自动挂载的设备(定义在/etc/fstab文件中,且挂载选项有“自动挂载”)
-L “Label”: 以卷标方式挂载
-U “UUID”: 以UUID方式挂载
-B :绑定目录到另一个目录上
Note: 查看内核追踪到的已挂在所有设备: /proc/mounts
-o [options] : 指定挂载文件系统的选项
options:
async: 异步模式
sync: 同步模式
atime/noatime : 包含目录和文件
diratime/nodiratime: 目录的访问时间戳
auto/noauto: 是否支持自动挂载
exec/noexec: 是否支持将文件系统上的应用程序运行为进程
dev/nodev: 是否支持在此文件系统上使用设备文件
suid/nosuid: 是否支持suid特殊权限
remount: 重新挂载
ro
rw
user/nouser: 是否支持普通进行重新挂载操作
acl :启用该文件系统上的acl功能
Note: 上述选项可以同时使用,彼此之间使用逗号分隔符
默认选项: defaults
包含的特性: rw suid dev exec auto nouser async
- 卸载命令:umount
umount <device|mount_point>
交换分区管理:
swapon命令: 启用交换分区
swapon [options] [devices…]
选项:
-a : 激活所有的交换分区
-p PRIORITY: 指定优先级
swapoff命令: 禁用交换分区
swapoff [options…] [device…]
Note : 临时方式;系统重启之后又失效了
相关命令:
内存使用空间状态: free命令
free [options]
-m : 以MB为单位
-g :以GB为单位
[root@test ~]# free
total used free shared buff/cache available
内存总量 使用量 空闲量 共享内存空间 buff/cache使用量 可用量
文件系统空间占用等信息查看工具:df命令
- h : human-readable
- i : inodes 代替 blocks
- P : 以Posix兼容的格式输出
(Posix : 开源可移植性操作系统)
- T : 输出文件系统类型信息
查看某目录总体空间占用状态:
du命令
-h : human-readable
-s :summary
dd命令:
Copy a file, converting and formatting according to the operands
作用: 测试磁盘IO及数据迁移等工作
用法:
dd if=/path/from/src of=/path/to/dest
bs= : 复制数据的单元大小(block size)
count= : 复制多少个bs
磁盘的拷贝:
dd if=/dev/sdb1 of=/dev/sdb2
备份MBR:
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
破坏MBR中的启动程序:
.......
测试:
/dev/null : 数据黑洞
/dev/zero :吐0机
测试一块新硬盘的IO速率:
dd if=/dev/zero of=/dev/<device> # 生产环境中:千万不要把目的地搞错
步骤
添加磁盘 --> 磁盘格式化(选择分区格式)–> 分区 --> 通知内核重新获取磁盘分区
—> 文件系统格式化 —> 挂载 --> du(测试IO)