磁盘、文件系统管理
1 设备识别
2 设备分区
3 创建文件系统
4 标记文件系统
5 在/etc/fstab文件中创建条目
6 挂载新的文件系统
7 为什么是分区?
8 优化I/O性能
9 实现磁盘空间配额限制
10 提高修复速度
11 隔离系统和程序
12 安装多个OS
13 采用不同文件系统
两种分区方式MBR和GPT
MBR: Master Boot Record,1982年,使用32位表示扇区数,分区不超过2T
如何分区:按柱面
0磁道0扇区:512bytes
446bytes: boot loader
64bytes:分区表
16bytes: 标识一个分区
2bytes: 55AA
4个主分区;3主分区+1扩展(N个逻辑分区)
GPT:GUID(Globals Unique Identifiers)partition table
支持128个分区,使用64位,支持8Z(512Byte/block )64Z (4096Byte/block)
使用128位UUID 表示磁盘和分区GPT分区表自动备份在头和尾两份,并有CRC校验位
UEFI (统一扩展固件接口)硬件支持GPT,使操作系统启动
列出块设备:
lsblk
ls /dev/sd*
cat /proc/partitions
创建分区使用:
fdisk创建MBR分区,也支持GPT,对于一块硬盘,最多只能管理15分区
gdisk创建GPT分区, 跟fdisk 差不多
GNU parted高级分区操作(创建、复制、调整大小等等)
查看磁盘分区情况:
[root@Compro ~]# fdisk -l /dev/sda
[root@Compro ~]# fdisk /dev/sdb
gfisk /dev/sdb 类fdisk 的GPT分区工具
fdisk -l [-u] [device...]
子命令:
p 分区列表
t 更改分区类型
n 创建新分区
d 删除分区
w 保存并退出
q 不保存并退出
扫描磁盘
新添加硬盘加载到当前系统:
~]# echo "- - -"> /sys/class/scsi_host/host2/scan
查看块设备:
~]# lsblk
查看mbr:
~]# hexdump -C -n 512 /dev/sda 查看磁盘二进制字节
备份mbr :
[root@Compro ~]# dd if=/dev/sda of=/testdir/mbrbak bs=1 count=512
if读取文件路径 of 输出文件路径到哪个地方
记录了512+0 的读入
记录了512+0 的写出
512字节(512 B)已复制,0.0104854 秒,48.8 kB/秒
查看是否成功:
[root@Compro ~]# hexdump -C -v /testdir/mbrbak
通知内核重新读取硬盘分区表
新增分区用:
partx -a /dev/sdb
kpartx -a /dev/sdb -f: force
删除分区用:
centOS6: -n --nr <n:m> 指定分区范围(例如:--nr 2:4)
partx -d /dev/sdb
CentOS7: 使用partprobe
~]# partprobe /dev/sdb
parted的操作都是实时生效,小心使用
用法:parted [选项]... [设备[命令[参数]...]...]
parted /dev/sdbmklabelgpt|msdos [root@Compro ~]# parted /dev/sdb mklabel gpt 更改磁盘标签类型
parted /dev/sdbprint
parted /dev/sdbmkpartprimary 1 200 (默认M)
parted /dev/sdbrm1 [root@Compro ~]# parted /dev/sdb rm 1 删除1分区
parted -l /dev/sdbrm1 在所有块设备列表分区布局
文件系统分类:
常用的linux文件系统:ext2,ext3,ext4,xfs,btrfs,reiserfs,jfs,swap
交换文件系统:swap
网络文件系统:nfs , smbfs
集群文件系统:GFS , OCFS
分布式文件系统:ceph,moosefs,mogilefs,glusterfs,lunster
未经处理或者未经格式化产生的文件系统: RAW
光盘文件系统:isso96600
根据其是否支持日志功能还可分为:
日志型文件系统:ext3,etx4,xfs
非日至类型文件系统:ext2,vfat
文件系统的组成部分:
内核中的模块:ext4,xfs,vfat
用户空间的管理工具:mkfs.ext4 , mkfs.xfs , mkfs.vfat
linux的虚拟文件系统:VFS
查看当前支持的文件系统: cat/proc/filesystems
创建文件系统
mkfs命令 # mkfs. 类型 /dev/sda
用法:
mkfs [选项] [-t <类型>] [文件系统选项] <设备> [<大小>]
ext4
xfs
btrfs
vfat
选项:
-t, --type=<类型> 文件系统类型;若不指定,将使用 ext2
fs-options 实际文件系统构建程序的参数
<设备> 要使用设备的路径
<大小> 要使用设备上的块数
[root@Compro ~]# mkfs -t ext4 /dev/sdb1
[root@Compro ~]# mkfs -L 类型 /dev/sdb1 设定卷标
mke2fs ext系列文件系统专用 管理工具
[root@Compro ~]# mke2fs -t ext2 /dev/sdb1 {ext|2|ext3|ext4}
[root@Compro ~]# mke2fs -b 1024 /dev/sdb1 {1024|2048|4096} 指定块大小
[root@Compro ~]# mke2fs -L /mnt/sdb1 /dev/sdb 设定卷标类型 一般设定挂载点为卷标名
[root@Compro ~]# mke2fs -j /dev/sdb1 相当于 -t ext3
[root@Compro ~]# mke2fs -i # /dev/sdb1 #为数字;为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小
[root@Compro ~]# mke2fs -N # /dev/sdb1 #为数字;为数据空间创建个多少个inode节点表
[root@Compro ~]# mke2fs -I 128 /dev/sdb 修改inode记录大小128---4096
[root@Compro ~]# mke2fs -m # /dev/sdb1 #为数字; 默认5%,为管理人员预留空间占总空间的百分比
[root@Compro ~]# mke2fs -O has_journal /dev/sdb1 启用指定特性 启用日志功能,也可以启动别的特性
[root@Compro ~]# mke2fs -O ^has_journal /dev/sdb1 关闭指定特性 关闭了日志功能 ,也可以关闭其它特性
指向设备的另一种方法;与设备无关
[root@Compro ~]# blkid 块设备属性信息查看
[root@Compro ~]# blkid [选项]... [设备]
[root@Compro ~]# blkid -U UUID: 根据指定的UUID来查找对应的设备
[root@Compro ~]# blkid -L ext3 根据指定的标签来查找对应的设备
[root@Compro ~]# e2label /dev/sdb1 ext2 :管理ext系列文件系统的标签
格式 e2label DEVICE [LABEL]
tune2fs:重新设定ext系列文件系统可调整参数的值
[root@Compro ~]# tune2fs -l /dev/sdb1 查看指定文件系统超级块信息;super block
[root@Compro ~]# tune2fs -l /dev/sdb1 修改卷标
[root@Compro ~]# tune2fs -m # /dev/sdb1 #为数字;修改预留给管理员的空间百分比
[root@Compro ~]# tune2fs -j /dev/sdb1 将ext2升级为ext3
[root@Compro ~]# tune2fs -O has_journal /dev/sdb1 文件系统属性启用或禁用 启用日志功能,也可以启动别的特性
[root@Compro ~]# tune2fs -O ^has_journal /dev/sdb1 关闭指定特性 关闭了日志功能 ,也可以关闭其它特性
[root@Compro ~]# tune2fs -o acl /dev/sdv1 调整文件系统的默认挂载选项
[root@Compro ~]# tune2fs -o ^acl /dev/sdv1
[root@Compro ~]# tune2fs -U UUID 修改UUID号
[root@Compro ~]# uuidgen 随机生成UUID
[root@Compro ~]# dumpe2fs -h /dev/sdb1 查看超级块信息(分组信息),分区用分组管理 同tune2fs -l 一样
常发生于死机或者非正常关机之后
挂载为文件系统标记为“dirty”
fsck: File System Check 文件系统校验
[root@Compro ~]# fsck.文件类型
[root@Compro ~]# fsck /dev/sdb1
[root@Compro ~]# fsck -y /dev/sdb1 自动回答为yes
[root@Compro ~]# fsck -t 文件类型
[root@Compro ~]# fsck -a /dev/sdb1自动修复错误
[root@Compro ~]# fsck -r /dev/sdb1 交互式修复错误
注意: 文件类型一定要与分区上已经文件类型相同;
e2fsck:ext系列文件专用的检测修复工具
-y:自动回答为yes
-f:强制修复
文件系统的挂载
挂载mount
挂载:将额外文件系统于根文件系统某现存的目录建立起关联关系,
进而使得此目录作为其他文件访问入口的行为
卸载:解除此关联关系的过程
把设备关联挂载点:mount Point
卸载时:可使用设备,也可以使用挂载点 umount
挂载点下原有文件在挂载完成后会被临时隐藏
挂载点目录一般为空
挂载工具mount的使用
mount 设备 安装指向
设备:所奥挂载的磁盘分区
安装指向挂载点:另一个文件系统的访问入口
mount 通过查看/etc/mtab文件显示当前已经挂载的所有设备
固定挂载点:/mnt,/media
mount [选项]...[-t 文件类型] [-o 选项]设备 挂载点
挂载点需要具备以下两点:1事先存在 2使用空闲目录
进程正在使用中的设备无法被卸载
[root@Compro ~]# mount /dev/sdb1 /testdir/ 将磁盘挂载到testdir目录下
常用挂载选项:
-t 指定文件系统类型
-r 只读挂载
-w 读写挂载
-L 以卷标方式指定设备,
-U 以UUID的方式指定设备,例如 mount -U UUID 挂载点
-a 自动挂载所有(/etc/fstab文件中定义的)的支持自动挂载设备
-n 挂载时,不更新/etc/mtab文件
-B 绑定目录到另一个目录上
cat /proc/mounts 查看内核追踪到的已经挂载的所有设备
伪文件系统名称:proc, sysfs, devtmpfs, configfs
-o 选项:(挂载文件系统的选项)
async:异步模式
sync:同步模式,内存更改时,同时写磁盘
atime/noatime:包含目录和文件
diratime/nodiratime:目录的访问时间戳
auto/noauto:是否支持自动挂载,是否支持-a选项
exec/noexec:是否支持将文件系统上运行应用程序
dev/nodev:是否支持在此文件系统上使用设备文件
suid/nosuid:不否支持suid和sgid权限
remount:重新挂载
ro:只读
rw:读写
user/nouser:是否允许普通用户挂载此设备,默认管理员才能挂载
acl:启用此文件系统上的acl功能
注意:上述选项可多个同时使用,彼此之间使用逗号分隔
默认挂载选项:rw, suid, dev, exec, auto, nouser, async
查看挂载情况:
[root@Compro ~]# findmnt /dev/sda1
查看正在访问指定文件系统的进程:
[root@Compro ~]# lsof /dev
[root@Compro ~]# fuser -v /dev/
终止所有在正访问指定的文件系统的进程:
[root@Compro ~]# fuser -km /dev/ 善用此命令
卸载:
umount 设备
umount 指明安装路径
设备自动挂载
配置文件系统:/etc/fstab
被mount、fsck和其它程序使用
系统重启是保留文件系统卷标
可以在设备栏使用文件系统卷标
使用mount -a 命令挂载/etc/fstab中的所有文件系统
/etc/fstab每行定义一个要挂载的文件系统;
要挂载的设备或伪文件系统
挂载点
文件系统类型
挂载选项
转储频率
自检次序
要挂载的设备或伪文件系统:
设备文件、LABEL(LABEL="")、UUID(UUID="")、伪文件系统名称(proc, sysfs)
挂载选项:defaults
转储频率:
0:不做备份
1:每天转储
2:每隔一天转储
自检次序:
0:不自检
1:首先自检;一般只有rootfs才用1
处理交换文件和分区
交换分区是系统RAM的补充
基本设置包括:
创建交换分区或者文件
使用mkswap写入特殊签名
在/etc/fstab文件中添加适当的条目
使用swapon -a 激活交换空间
挂载交换分区
启用:swapon
swapon [OPTION]... [DEVICE]
-a:激活所有的交换分区;
-p PRIORITY:指定优先级
/etc/fstab:pri=value
禁用:swapoff [OPTION]... [DEVICE]
SWAP的优先级
用户可以给某个swap指定一个0到32767的优先级
如果用户没有指定,那么核心会自动给swap指定一个优
先级,这个优先级从-1开始,每加入一个新的没有用户
指定优先级的swap,会给这个优先级减一。
先添加的swap的缺省优先级比较高,除非用户自己指定
一个优先级,而用户指定的优先级(是正数)永远高于核心
缺省指定的优先级(是负数)。
优化性能:分布存放,高性能磁盘存放
移动介质
挂载意味着使外来的文件系统看起来如同是主目录树的一部分
访问前、介质必须被挂载
摘除时,介质必须被卸载
按照默认设置,非根用户只能挂载某些设备(光盘、DVD、软
盘、USB等等)
挂载点通常在/media 或/mnt下
使用光盘
在图形环境下自动启动挂载/run/media/<user>/<label>
否则就必须被手工挂载
mount /dev/cdrom/mnt/
eject命令卸载或弹出磁盘
创建ISO文件
cp/dev/cdrom/root/centos7.iso
mkisofs -r -o /root/etc.iso /etc
刻录光盘
wodim–v –eject centos.iso
挂载USB介质
被内核探测为SCSI设备
/dev/sdaX、/dev/sdbX、或类似的设备文件
手动挂载
mount /dev/sdb1 /mnt
常见工具
内存空间使用状态:
free [OPTION]
-m: 以MB为单位
-g: 以GB为单位
文件系统空间占用等信息的查看工具:
df [OPTION]... [FILE]...
-H 以1000为单位
-T 文件系统类型
-h: human-readable
-i:inodesinstead of blocks
-P: 以Posix兼容的格式输出
查看某目录总体空间占用状态:
du [OPTION]... DIR
-h: human-readable
-s: summary
工具dd
dd命令:convert and copy a file
用法:
ddif=/PATH/FROM/SRC of=/PATH/TO/DEST
bs=#:block size, 复制单元大小
count=#:复制多少个bs
of=file写到所命名的文件而不是到标准输出
if=file从所命名文件读取而不是从标准输入
bs=size指定块大小(既是是ibs也是obs)
ibs=size一次读size个byte
obs=size 一次写size个byte
cbs=size 一次转化size个byte
skip=blocks从开头忽略blocks个ibs大小的块
seek=blocks从开头忽略blocks个obs大小的块
count=n只拷贝n个记录
conv=conversion[,conversion...] 用指定的参数转换文件。
转换参数:
ascii 转换EBCDIC 为ASCII
ebcdic 转换ASCII 为EBCDIC
block 转换为长度为cbs 的记录,不足部分用空格填充。
unblock 替代cbs长度的每一行尾的空格为新行
lcase 把大写字符转换为小写字符
ucase 把小写字符转换为大写字符
swab 交换输入的每对字节
noerror 出错时不停止
notrunc 不截短输出文件
sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐
磁盘拷贝:
ddif=/dev/sdaof=/dev/sdb
备份MBR:
ddif=/dev/sdaof=/tmp/mbr.bakbs=512 count=1
破坏MBR中的bootloader:
ddif=/dev/zero of=/dev/sdabs=64 count=1 seek=446
有一个大与2K的二进制文件fileA。现在想从第64个字节位置开始读取,需要读取的大小是128Byts 。
又有fileB, 想把上面读取到的128Bytes写到第32个字节开始的位置,替换128Bytes,请问如何实现?
#ddif=fileAof=fileBbs=1 count=128 skip=63 seek=31 conv=notrunc
备份:
dd if=/dev/sdx of=/dev/sdy
将本地的/dev/sdx整盘备份到/dev/sdy
dd if=/dev/sdx of=/path/to/image
将/dev/sdx全盘数据备份到指定路径的image文件
dd if=/dev/sdx | gzip >/path/to/image.gz
备份/dev/sdx全盘数据,并利用gzip工具进行压缩,保存到指定路径
恢复:
dd if=/path/to/image of=/dev/sdx
将备份文件恢复到指定盘
gzip -dc /path/to/image.gz | dd of=/dev/sdx
将压缩的备份文件恢复到指定盘
拷贝内存资料到硬盘
dd if=/dev/mem of=/root/mem.bin bs=1024
将内存里的数据拷贝到root目录下的mem.bin文件
从光盘拷贝iso镜像
dd if=/dev/cdrom of=/root/cd.iso
拷贝光盘数据到root文件夹下,并保存为cd.iso文件
销毁磁盘数据
dd if=/dev/urandom of=/dev/sda1
利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。
执行此操作以后,/dev/sda1将无法挂载,创建和拷贝操作无法执行。
得到最恰当的block size
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
通过比较dd指令输出中所显示的命令执行时间,即可确定系统最佳的block size大小
测试硬盘读写速度
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
通过上两个命令输出的执行时间,可以计算出测试硬盘的读/写速度
修复硬盘
dd if=/dev/sda of=/dev/sda
当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生消磁点。
当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,
可能导致硬盘报废。上边的命令有可能使这些数据起死回生。且这个过程是安全,高效的。
本文出自 “小马哥Linux系统运维” 博客,转载请与作者联系!
原文地址:http://xiaomag.blog.51cto.com/11842517/1844050