机械式硬盘
1.平均寻道时间:ns
2.磁盘转速:rpm 5400 7200 10000rpm 15000rpm
track:磁道
sector:扇区,512Bytes,现在我们所说的扇区实际上是平均值
cylinder:柱面,从磁道向所有盘面做投影
partition:分区,基于柱面来划分的存储空间
head:磁头,每个磁盘表面都有一个磁头
设备文件:/dev
设备文件是关联到硬件设备的驱动程序和设备的访问入口
设备号:
major:主设备号,区分设备的类型,用于标明设备所需的驱动程序
mijor:次设备号,区分两种类型下的不同设备,是特定设备的访问入口
mknod命令:
mknod - make block or character special files 制造一个块或者字符类型的文件
mknod [OPTION]... NAME TYPE [MAJOR MINOR]
设备类型:
块设备:b(block) 用于随机访问的设备,数据存储和交换的单位是块。
字符设备:c(character) 用于线性访问的设备,数据的交换单位一般是字符。
设备文件名:IANA--->ICANN
所有设备放在/dev/下面
IDE:hd[a-d]
SCSI/SATA/SAS/USB:sh[a-z] sdab
RHEL,Centos6开始:所有的接口类型的硬盘设备统一命名为sd[a-z]
设备的引用方式:
设备的文件名
卷标(Volume Lable)
UUID:全局唯一标识符,128bit
如何使用一个新的硬盘设备?
分区
创建文件系统(格式化)
挂载分区
为何分区?
1.优化I/O性能
2.实现磁盘空间的配额限制
3.可以进行高速修复
4.隔离系统文件和其他程序文件
5.安装多个操作系统
如何分区?
MBR分区:硬盘空间小于2TB
MBR:Master(Main) Boot Record,主引导记录,起源于1982年。
0磁道0扇区:整个磁盘的最开始的位置 512Byte
446Byte:boot loader,引导加载程序,默认是GRUB
64Byte:Partition table,分区表,每16Bytes表明一个分区的内容:因此一个有四个主分区
注意:
1.主分区加扩展分区最多可以有四个,其分区表位的编号依次为1.2.3.4
2.逻辑分区的编号从5开始,不管前面的四个数字编号是否被占用
2Bytes:结束标记,55AA
GBT分区:硬盘空间大于2TB
GUID Partition Table, GUID分区表,支持128个分区
UEFI(统一扩展固件接口)的硬盘可以支持GPT
通常使用的分区工具:
fdisk:用于管理和创建MBR分区,对于一块硬盘来说只能管理十五个分区
gdisk:GNU disk 用于创建和管理GPT分区
如果使用fdisk或者gdisk命令对于已有分区并挂载使用的磁盘的剩余空间进行再次分区的信息,即便是保存了,也不会被内核重新读取,如果要让内核识别此类分区:
1.重启计算机
2.partprobe命令或者partx命令强制内核重读分区表,
在centos5/7 partprobe [device] 如果省略了设备名,则表示重读所有磁盘的分区表
在centos6/7 partx -a [device]
kpartx -af [device]
查看分区后内核有没有识别的目录: cat /proc/partitions
强制内核读取分区后的信息:partprobe /dev/*
fdisk分区实例:
fdisk -l [-u] [device...] 查看指定磁盘的分区表,如果省略device参数,则显示所有磁盘设备的分区表
fdisk device
fdisk子命令
d 删除分区
l 显示此磁盘的详细信息
m 帮助菜单
n 添加分区
n的子命令
e 扩展分区
p 主分区
l 逻辑的
p 在交互模式中显示分区表
q 不保存,退出编辑
t 修改Partition系统标识
w 保存并且退出
parted:GNU 高级分区工具,实时生效
parted - a partition manipulation program
parted [options] [device [command [options...]...]]
parted /dev/sdb mklabel gpt|msdos
parted /dev/sdb print
parted /dev/sdb mkpart primary 1 200
parted /dev/sdb rm 1
~]# echo ‘- - -‘ > /sys/class/scsi_host/host2/scan
强制内核识别在开机状态下插上的SCSI接口的磁盘
写一个脚本,将一个命令所依赖的共享库文件复制到/mnt/sysroot/lib64目录中,如果库文件已经存在于目标目录中,就不复制。
#!/bin/bash
#
DEST=/mnt/sysroot/lib64
if [ ! -d $DEST ] ; then
mkdir -p $DEST
fi
until [ "$CMD" == ‘quit‘ ] ; do
read -p "give me a command: " CMD
if which --skip-alias $CMD &> /dev/null ; then
for I in $(ldd $(which --skip-alias $CMD) | grep -o "/[^[:space:]]\+") ; do
SRCLIB=$(basename $I)
if [ ! -e ${DEST}${SRCLIB} ] ; then
cp $I $DEST
fi
done
else
echo "Command not invalid."
fi
done
4.30
创建文件系统:
FHS 文件系统层级标准
权限
文件的命名规则
为什么创建文件系统?
平面分类管理
空间分类管理
创建文件系统实际上就是给分区进行存储空间的逻辑编址。
格式化:
低级格式化
物理层面完成格式化,在磁盘设备出厂时,通过低级格式化来创建磁道,主要作用就是创建磁道
高级格式化
分区之后进行的,主要作用是用来创建文件系统,为分区构建逻辑编址单元
无论是簇还是块都是将一个或者多个扇区组织在一起,共同完成数据存储
簇: 512B 1024 2048 4096 8192 16384 32768 655536
块:1024 2048 4096
注意:
1.一个块只能放置一个文件的内容,一个文件可以占用多个块
2.如果在某个分区中,将创建大量的小文件,把块划分的小一些,反之,块就大一些
3.如果分区空间比较大,块也应该大一些
在一个分区中创建了文件系统:
首先,会将分区划分成大小相等的若干块
元数据块
元数据---inode(index node)
文件的属性:
文件的大小
文件的权限
文件的所有者
文件的时间戳
数据块指针
存放元数据的固定的存储空间称为:inode
每个inode都有其对应的inode编号
数据块
存放文件中所包含的流式数据
特殊文件:
设备文件:block special或者character special
仅仅是将元数据中的数据块指针换成了设备号
符号链接文件:symbolic link
仅仅是将元数据中的数据块指针换成了另一个文件的访问路径
这类文件只占据元数据区域,没有数据块占用。
随着磁盘空间越来越大,我们划分块的数量也越来越多,我们管理起来也越来越不方便,划分块组可以解决该问题。
块组:每个块组有独立的元数据块和数据块
存放数组的时候,以块组内的数据块优先选择,如果块数组内的数据块不够,可以通过存储策略来请多个块组协调存储
超级块:主要定义了有多少个块组,以及每个块组的边界。
为了防止超级块发生故障导致整个文件系统崩溃,要对超级块进行冗余备份。
日志区域:对于数据的写入操作做记录的块,防止数据不一致
数据不一致通常都是由于不洁关机,不洁断电导致的。
一个完整的文件系统:
超级块, inode, inode bitmap, block bitmap, data block, journal block。
想要查找/var/log/messages文件的内容,是怎样的过程?
首先查找/目录inode编号,从元数据区域中找到对应inode,再读取inode中的数据块指针,找到存放/目录内容的数据块;
然后,在数据块中查找名称为var的文件名,如果有,就定位其inode编号,再到元数据区域中查找对应编号的inode,再根据数据块指针找到保存var目录内容的数据块;
再然后,在该数据块中查找名称为log的文件名,如果有,就定位其inode编号,再到元数据区域中查找对应编号的inode,再根据数据块指针找到保存log目录内容的数据块;
之后,在该数据块中查找名称为messages的文件名,如果有,就定位其inode编号,再到元数据区域总查找对应编号的inode,再根据数据块指针找到messages文件对银的数据块,就可以读取数据;
系统调用
Linux支持的文件系统
位于内核空间的文件系统驱动
1.内核的一部分
2.内核的模块
位于用户空间的文件系统管理应用程序
Linux自己的文件系统:
ext ext2 ext3 ext4(支持最大分区50TB,可以做根分区,可以做启动分区)
xfs(目前为止企业级的64位文件系统,最大分区可以支持500TB,也可以做根和启动分区)
reiserfs(良好的反删除功能)
btrfs 平衡树文件系统(技术预览版)
光盘文件系统:iso9660
网络文件系统:NFS CIFS
集群文件系统:gfs2 ocfs2
内核级的分布式文件系统:ceph
伪文件系统:proc sysfs tmpfs hugepagefs
Windows的文件系统:vfat vtfs
Unix文件系统:ufs ffs jfs zfs
交换分区文件系统:swap
用户空间中的分布式文件系统:mogilefs moosefs glusterfs
对于不同的发行版的Linux:都有其默认的文件系统选择:
RHEL centos
5 ext3
6 ext4
7 xfs
写一个脚本,如果发现用户hacker登录,则将登录时间和主机记录于日志/var/log/login.log中;
#!/bin/bash
#
if who | grep -q "\<hacker\>" ; then
for I in $(who | grep "\<hacker\>" | cut -d ‘ ‘ -f3-5 --output-delimiter=‘ ‘); do
echo -n $I >> /var/log/login.log
done
fi
管理文件系统:
创建文件系统:
mkfs
mkfs.ext3 mkfs.xfs mkfs.btrfs mkfs.ext2 mkfs.ext4
文件系统监测和修复系统:
fsck
fsck.ext3 fsxk.ext3 fsck.ext4
文件系统属性查看工具:
dumpe2fs
文件系统的属性调整工具:
tune2fs
创建文件系统工具:
mkfs命令:
mkfs - build a Linux filesystem
mkfs [options] [-t type] [fs-options] device [size]
mkfs -t ext2 /dev/sdb1
注意:
1.不要使用磁盘设备名称和扩展分区设备作为mkfs命令的参数,如果使用磁盘设备作为mkfs的参数,所有的分区都被删除。如果使用扩展分区作为mkfs的参数,所有的逻辑分区都将被删除
2.能够作为mkfs命令参数的设备,是主分区设备和逻辑分区设备
如果只是计划创建ext系列文件系统的话,可以使用mke2fs命令:
mke2fs:
mke2fs - create an ext2/ext3/ext4 filesystem
常用选项:
-b block-size 在创建文件系统时,调整块的大小
-i bytes-per-inode 指明inode与字节的比率,即:多少个字节可以建一个inode,默认为16384
-j 创建有日志功能的文件系统,就是ext3
-N number-of-inodes 直接指明要给此文件系统创建的inode的数量
-m reserved-blocks-percentage 指定为超级用户root保留的磁盘空间的百分比,默认值是5
-t fs-type 指定文件系统类型 ext2 ext3 ext4 默认是ext2
-O [^] feature[,...] 关闭或者开启文件系统的特性
-L volume-label 为文件系统指定卷标
-F 强制创建文件系统
-E 用户指定的额外文件系统属性
如果只是想要修改ext文件系统的卷标,可以使用e2label命令
e2label - Change the label on an ext2/ext3/ext4 filesystem
e2label device [ new-label ]
注意:如果不加卷标信息,表示查看指定设备的卷标
如果添加了卷标信息,表示修改指定设备的卷标
如果想要修改ext系列的文件系统的属性,可以使用tune2fs命令
tune2fs - adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems
调整那些在ext2.3.4文件系统上的可修改的参数:
常用的选项:
-j 将ext2文件系统修改为ext3
-m reserved-blocks-percentage 修改为超级用户root保留的磁盘空间的百分比
-o [^]mount-options[,...] 修改文件系统的默认挂载选项
-r reserved-blocks-count 修改为超级用户预留的磁盘空间块的数量
-L volume-name 修改文件系统的卷标
-O [^]feature[,...] 修改文件系统的特性,将其关闭或者启用
-l 显示超级块的信息,相当于dumpe2fs -h
文件系统的检测修复工具:
fsck
-t fstype 指定要检测的文件系统类型
-a 无需交互自动修复所有问题
-r 交互式修复问题,
ext系列文件系统专门的文件检测修复工具:
e2fsck
-y 在交互过程中的说有问题,都以yes来回答
-f 强制检测修复,即使文件系统处于clean状态,
blkid
查找和显示属性的工具
blkid -L label 根据卷标进行查找
blkid -U uuid 根据UUID进行查找
findfs
find a filesystem by label or UUID 查找一个文件通过卷标或者UUID
findfs LABEL=label
findfs UUID=uuid
创建swap文件系统:
前提:分区类型必须是swap类型
修改的方法:在fdisk交互模式中,使用t命令将指定分区的类型修改为82即可
mkswap
set up a Linux swap area
-L, --label 设置交互分区的卷标
-f 强制执行
使用文件系统:挂载
根文件系统之外的其他文件系统想要被访问,都必须通过某种方式关联到根文件系统上,具体做法就是把其他文件系统装载到根文件系统中的某个目录之中,这个过程称为“挂载”用于关联其他文件系统的那个目录,称为挂载点。
挂载点:mount point 也就是其他文件系统的访问入口 例如: /boot
要求:
1.作为挂载点的目录必须事先存在
2.作为挂载点的目录应该是没有被使用或者不能被其他进程使用的目录
3.作为挂载点的目录一旦挂载文件系统,其内原有的文件将被隐藏
完成挂载操作使用mount命令:
mount - mount a filesystem
mount [-fnrsvw] [-t vfstype] [-o options] device dir
常用选项:
-r, --read-only 以只读的方式挂载目录文件系统,
-w, --read-write 以读写的方式挂载目标文件系统
-n,默认情况下,设备挂载或者卸载的情况下会同步更新到/etc/mtab中,如果在挂载时使用了-n选项,则表示我们要禁用此特性,即不挂载成功,也不会更新到/etc/ntab中
-t -vfstype 指明要挂载的设备上创建的文件系统类型,如果省略该选项,mount命令会通过blkid来判断要挂载的目标设备的文件系统类型
-L -LABEL 挂载文件系统时,使用卷标代替设备名称
-U UUID 挂载文件系统时,使用UUID代替设备名称
-a mount -a 按照/etc/fstab文件中填写的设备进行自动挂载
-o option:
sync/nosync:同步/异步 操作
atime/noatime:文件或者目录被读取访问时是否更新访问时间戳
diratime/nodiraname:目录被读取访问时是否更新访问时间戳
ro/rw:是否只读/读写的方式挂载文件系统
dev/nodev:在此文件系统中是否允许创建设备文件
exec/noexec:在此文件系统中是否允许运行程序文件
auto/noauto:是否允许使用mount -a方式的挂载/etc/fstab中的文件系统
user/nouser:是否允许普通用户挂载此文件系统
suid/nosuid:是否允许程序文件上的SUID和SGID特殊权限生效
relatime/norelatime:是否参考inode访问的时间来修改其修改时间和改变时间
remount:不经卸载实现直接挂载,可以应用到新的挂载选项
acl:可以使文件系统支持facl功能
defaults:默认选项,包括rw,suid,dev,exec,auto,nouser,async,relatime
loop: 使用环回设备:将镜像文件挂载到挂载点
-B --bind 将某个绑定到另一个目录
卸载文件系统:
umount mount_point|device
挂载光盘:
1.保证光盘镜像文件放入虚拟机光驱
2.保证光驱处于“已连接”状态
3.创建光驱挂载点 mount -r /dev/sr0 mount_point
挂载优盘:
需要事先让系统识别优盘设备,然后根据设备进行挂载,/etc/sdc1
挂载交互分区:
swapon swapoff 挂载和卸载
-a: 自动挂载存储于/etc/fstab文件中的交互分区设备
df
-h
-t
-p
free
-k
-n
-g
/etc/fstab文件的格式:
共六个字段,使用空白字符分隔,
1.要挂载的设备
设备文件名
LABEL
UUID
伪文件系统
2.挂载点
swap设备无需挂载点,指定swap即可
3.文件系统类型
4.挂载选项:defaults
5.转储频率
使用dump命令备份分区的频率
0 表示不备份
1 每天备份一次
2 每隔一天备份一次
6.自动次序
0 不自检
1 优先自检 通常只设置在根文件系统上
2 次级自检
...
9 最低优先级自检