1、复习本次课程所讲的内容;
Linux磁盘管理
硬盘:硬盘是通用的叫法,其实硬盘和磁盘是一样的,都是用来存东西的;还有磁带、光盘、U盘等只是存储的介质不一样。
机械式硬盘
SSD固态硬盘
机械式:
track磁道
每个扇区(sector): 512bytes
磁柱(cylinder): 分区的基本单位;
主引导记录 MBR:Master Boot Record 512bytes
446: bootloader
64: filesystem allocation table
16: 标识一个分区
2:55AA
磁盘的主引导扇区=磁盘的主引导记录(MBR 446)+磁盘分区表(DPT 64) +结束符(55AA)
bootload可以安装在磁盘的主引导记录(MBR)或是分区的引导记录(PBR,也叫DBR)
(1)linux的bootload可以安装在两者上(MBR,PBR)
(2)windows自行安装的MBR只用作跳转到指定的分区上,windows的bootloader 是安装在分区的PBR上的。
磁盘接口类型:
IDE (ATA):133MB/s,/dev/hd
SCSI: 640MB/s
SATA:6Gbps
SAS:6Gbps
USB:480MB/s
识别硬盘设备:/dev/sd
标记不同的硬盘设备:/dev/sd[a-z]
标记同一设备上的不同分区:/dev/sd[a-z][1-]
1-4: 主或扩展分区标识
5+:逻辑分区标识
设备文件:特殊文件
设备号:
major, minor
major: 设备类型
minor: 同一类型下的不同设备
“块”:block,随机设备
“字符”:character,线性设备
GPT
设备文件分为两种:块设备文件(b)和字符设备文件(c)
设备文件一般存放在/dev目录下,对常见设备文件作如下说明:
/dev/hd[a-t]:IDE设备
/dev/sd[a-z]:SCSI设备
/dev/fd[0-7]:标准软驱
/dev/md[0-31]:软raid设备
/dev/loop[0-7]:本地回环设备
/dev/ram[0-15]:内存
/dev/null:无限数据接收设备,相当于黑洞
/dev/zero:无限零资源
/dev/tty[0-63]:虚拟终端
/dev/ttyS[0-3]:串口
/dev/lp[0-3]:并口
/dev/console:控制台
/dev/fb[0-31]:framebuffer
/dev/cdrom => /dev/hdc
/dev/modem => /dev/ttyS[0-9]
/dev/pilot => /dev/ttyS[0-9]
/dev/random:随机数设备
/dev/urandom:随机数设备
分区:分隔存储空间为多个小的空间,每个空间可独立使用文件系统;
分区工具:
fdisk, parted, sfdisk
fdisk工具的使用:
最多支持在一块硬盘上的15个分区;
分区管理子命令:
p: 显示
n: 创建
d: 删除
t: 修改分区ID
l: 列出所有支持ID类型
w: 保存退出
q: 放弃修改并退出
m: 获取帮助
创建完成之后,查看内核是否已经识别新的分区:
# cat /proc/partitions
有三个命令可以让内核重读磁盘分区表:
CentOS 5: partprobe [DEVICE]
CentOS 6,7:
partx
kpartx
partx命令:
partx DEVICE
partx -a DEVICE
partx -a -n M:N DEVICE
M
M:
:N
kpartx命令:
kpartx -af DEVICE 通知内核强制重读分区表【对于一个已经存在的磁盘,内核是不会直接识别的】
2、总结整理磁盘管理及文件系统管理中设计的各种命令的使用,并附注一定的示例;
1)、查看系统分区情况
2)获取fdisk参数信息的相关帮助
命令:fdisk /dev/sda #进入fdisk操作环境
m #打印帮助 列表
3)新建分区
按n #创建一个分区
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
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
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)Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (7063-26108, default 7063):
Using default value 7063
Last cylinder, +cylinders or +size{K,M,G} (7063-26108, default 26108): +10GCommand (m for help): w
The partition table has been altered!Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.重启后生效。
linux文件系统管理
文件系统:
VFS:Virtual File System
Linux:ext2,ext3,ext4,reiserfs,xfs,btrfs,swap
光盘:iso9600windows:fat32(vfat),ntfs
Unix:ffs,ufs,jfs,jfs2
网络文件系统:nfs,cifs
集群文件系统:ocfs2,gfs2
分布式文件系统:ceph
mosefs,mogilefs,hdfs,gfs,gluterfs
(1)日志型文件
非日志型文件:ext2
日志型文件系统:ext3,ext4,reserfs,xfs,btrfs,swap
日志型文件系统[ext3,ext4]和非日志型文件系统[ext2]的区别:
日志型写入步骤:1.预备,当系统要写入文件时,会先在日志记录块中记录某个文件准备要写入的信息
2.实际写入,开始写入文件的权限和步骤;开始更新meta data[中间数据]的数据
3. 结束,完成数据与metadata的更新后,在日志记录块中完成该文件的记录
非日志写入步骤:1. 先确定用户对于欲添加文件的目录是否有w和x权限,若有的话才能添加
2.根据inode bitmap 找到没有使用的inode号码,并将新文件的权限/属性写入
3.根据block bitmap 找到没有使用的block号码,并将实际数据写入block中,且更新inode的block指向数据
4.将刚才写入的inode与block数据同步更新inode bitmap与block bitmap,并更新superblock的内容
当中途断电等因素导致系统中断时,会出现数据的不一致状态,这时非日志文件系统需要进行一致性检查,很费时间。而日志文件系统,只需要去检查日志记录块就可以知道那个文件发生了问题,不必去针对整块文件系统去检查。
(2)swap:交换分区
创建文件系统:
在分区上执行格式化(高级格式化)
要使用某种文件系统,满足两个条件
内核中:支持此种文件系统
用户空间:有文件系统管理工具
创建工具:mkfs(make file system)
-t {ext2|ext3|ext4}:指明要创建的文件系统类型
mkfs-t ext4 = mkfs.ext4 = mke2fs -t ext4
b {1024|2048|4096}:其上限由page frame决定
-L LABEL:指定要使用的卷标[使用时,LABEL=‘MYLABELNAME‘]
-j: 相当于使用-text3
mkfs.ext3= mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-i #: 指明inode与字节的比率[不加% ],;即,每多少字节给创建一个inode;
-N #: 直接指明给此文件系统创建多少个inode
-m #:指定预留空间的百分比[只有root能用,不用%];默认为5;
-O [^]FEATURE:可以用来指明这个文件系统额外可以具有的属性,具体可以查看man手册
例:-o has_journa 启用日志属性
-o ^has_journa 不启用日志属性
e2label: 调整卷标
查看:e2label /dev/DEVICE
设定卷标:e2label /dev/DEVICE LABEL
tune2fs:查看或修改ext系列文件系统的某些属性
查看超级块中的数据信息:如UUID:全局惟一标识符
tune2fs-l /dev/DEVICE
例 tune2fs -l /dev/sda5
修改指定文件系统的属性:
-j:ext2 --> ext3
-L LABEL: 修改卷标;
-m #: 调整预留空间的百分比;
-O [^]FEATURE: 开启或关闭某种特性
-o [^]mount_options: 开启或关闭某种默认挂载选项
-o acl开启acl
-o ^acl关闭acl
dumpe2fs命令:显示ext系列文件系统属性信息
dumpe2fs[-h] /dev/DEVICE
例dumpe2fs -h/dev/sda5
blickid命令:可以查看文件类型
检测文件系统
fsck.ext2, fsck.ext3, fsck.ext4, fsck.xfs ...
fsck:文件系统检查命令
-tFSTYPE
fsck-t FSTYPE = fsck.FSTYPE
例fsck -t ext4 修复即删除不一致文件
-a:自动修复所有错误[慎用]
-r: 交互式修复错误
ext系列文件系统的专用工具:
e2fsck
-y: 对所有问题自动回复为yes;
-f: 即使文件系统处于clean状态,也要强制进行检测;
Windows无法识别Linux上专用的文件系统,因此,有存储设备需要两种系统之间交叉使用时,应该使用windows支持的文件系统:
#mkfs -t vfat /dev/DEVICE
挂载:
注意:1.在Linux系统上,所有的文件系统必须通过根文件系统的某个分支来访问;
2.单一文件系统不应该被重复挂载在不同的挂载点(目录)中
3.单一目录不应重复挂载多个文件系统
4.作为挂载点的目录理论上应该都是空白目录,不然原来目录下的文件会被隐藏
根文件系统:根是一切文件系统的访问入口,根关联到的分区,有一定的要求:FHS
除了根,其余所有的其它文件系统如果想要被访问,都只能够通过“关联”至根文件系统上的某个目录来实现;这种操作即所谓的“挂载”,也即mount;相反动作,即卸载,命令为umount
挂载点:mount_point,即用于作为另一个文件系统访问入口的目录;
mount命令:
mountDEVICE MOUNT_POINT
挂载点
1、事先存在;
2、应该使用别的进程未使用的目录;
3、挂载点下原有的文件将被隐藏;
mount:将显示当前系统已经挂载的所有文件系统的相关信息;
mount[OPTION]... [-t FSTYPE] [-o OPTION] [DEVICE] MOUNT_POINT
命令选项:
-r: 只读挂载
-w: read and write,读写挂载
-t FSTYPE: 被挂载的设备上的文件系统类型;可省略,此时mount会自动使用blkid命令来判断之;
-L LABEL: 以卷标的方式指定要挂载的设备,因此,此时DEVICE必须省;
-U UUID:以UUID的方式指定要挂载的设备,因此,此时DEVICE必须省;
-a: 自动挂载所有的支持自动挂载的设备(/etc/fstab文件中定义的支持自动挂载的设备);
-n: 默认情况下,设备挂载与否的改变结果会被保存于/etc/mtab中一份;-n选项用于变动时不更新此文件
此时,如果想查看挂载的所有文件系统:cat /proc/mounts
-a: 自动挂载所有支持自动挂载的设备;
-B:绑定目录至另一个目录上;
-o 挂载选项:
async:异步模式
sync: 同步模式
atime/noatime:是否更新访问时间戳;
diratime/nodiratime:是否更新目录的访问时间戳;
auto/noauto: 是否允许此设备被自动挂载;
exec/noexec:是否允许执行此文件系统上应用程序;
dev/nodev:是否支持在此设备上使用设备文件;
suid/nosuid:
remount:重新挂载
ro
rw
user/nouser: 是否允许普通挂载此设备;
acl:是否支持此设备上使用facl;
defaults:rw, suid, dev, exec, auto, nouser, and async
umount:卸载命令
# umount DEVICE
# umount MOUNT_POINT
查看正在访问指定挂载点的进程:
# fuser -v MOUNT_POINT
终止所有正在访问指定的挂载点的进程:
# fuser -km MOUNT_POINT
3、创建一个10G的文件系统,类型为ext4,要求开机可自动挂载至/mydata目录
1)创建挂载点 #mkdir /mydata
2)创建分区 #我已创建sda3
3)分区文件系统高级格式化 #mkfs.ext4 /dev/sda3
4)配置挂载文件:/etc/fstab #vim /etc/fstab
/mydata ext4 defaults 0 0
5)挂载到 /mydata
# mount /dev/sda3 /mydata