磁盘管理和文件系统
机械硬盘和固态硬盘:
机械硬盘(HDD ):
Hard Disk Drive,即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成。机械硬盘中所有的盘片都装在一个旋转轴上,每张盘片之间是平行的,在每个盘片的存储面上有一个磁头,磁头与盘片之间的距离比头发丝的直径还小,所有的磁头联在一个磁头控制器上,由磁头控制器负责各个磁头的运动。磁头可沿盘片的半径方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操作。数据通过磁头由电磁流来改变极性方式被电磁流写到磁盘上,也可以通过相反方式读取。硬盘为精密设备,进入硬盘的空气必须过滤
固态硬盘(SSD ):
Solid State Drive,用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH 芯片、DRAM芯片)组成。固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的完全相同,在产品外形和尺寸上也与普通硬盘一致相较于HDD ,SSD在防震抗摔、传输速率、功耗、重量、噪音上有明显优势,SSD 传输速率性能是HDD 的2倍 倍相较于SSD ,HDD 在价格、容量、使用寿命上占有绝对优势
硬盘有价,数据无价,目前SSD 不能完全取代HHD
设备文件:
磁盘设备的设备文件命名:/dev/DEV_FILE
SCSI, SATA, SAS, IDE,USB: /dev/sd
虚拟磁盘:/dev/vd
不同磁盘标识:a-z,aa,ab…
/dev/sda, /dev/sdb, ...
同意设备上的不同分区:
/dev/sda1, /dev/sda5
硬盘存储术语:
head : 磁头(256个磁道)
track : 磁道(每个磁道1024个扇区)
cylinder : 柱面(一个柱面8M)
secotr : 扇区,512bytes(每个磁道512个扇区)
CHS:磁盘三围(C:柱面;H:磁头;S:扇区)
分区:
两种分区方式:MBR ,GPT
如何分区:按柱面
0 磁道0 扇区 :512bytes
446bytes : boot loader(和计算机启动有关)
64bytes : 分区表
16bytes : 标识一个分区
2bytes : 55AA
4 个主分区;3 主分区+1 扩展(N个逻辑分区)
MBR分区结构:
14.png 15.png 16.png 17.png管理分区
列出块设备:
lsblk
创建分区使用:
• fdisk 创建MBR 分区
• gdisk 创建GPT 分区
• parted 高级分区操作(创建、复制、调整大小等等)
partprobe -重新设置内存中的内核分区表版本
parted 命令
parted 的操作都是实时生效的,小心使用
用法:parted [ 选项]... [备 设备 [令 命令 [ 参数]...]...]
parted /dev/sdb mklabel gpt|msdos
parted /dev/sdb print
parted /dev/sdb mkpart primary 1 200 (默认M) )
parted /dev/sdb rm 1
parted -l
gfisk /dev/sdb 类fdisk的GPT 分区工具
fdisk -l [-u] [device...] 查看分区
fdisk /dev/sdb 管理分区
子命令:
p 分区列表
t 更改分区类型
n 创建新分区
d 删除分区
w 保存并退出
q 不保存并退出
同步分区表
查看内核是否已经识别新的分区:
cat /proc/partations
centos6 通知内核重新读取硬盘分区表
新增分区用:
partx -a /dev/DEVICE
kpartx -a /dev/DEVICE -f: force
删除分区用:
partx -d --nr M-N /dev/DEVICE
CentOS 5 ,7: 使用partprobe :
partprobe [/dev/DEVICE]
文件系统
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等
支持的文件系统(在这个路径下):/lib/modules/`uname –r`/kernel/fs
文件系统类型
Linux 文件系统:ext2(Extended file system),ext3,ext4, xfs (SGI公司 ),
btrfs (Oracle ), reiserfs, jfs(AIX ), swap
光盘:iso9660
Windows :FAT32, exFAT,NTFS
Unix: FFS (fast ), UFS (unix ), JFS2
网络文件系统:NFS, CIFS
集群文件系统:GFS2, OCFS2 (oracle) )
分布式文件系统: fastdfs,ceph, moosefs, mogilefs,glusterfs, Lustre
RAW :未经处理或者未经格式化产生的文件系统
文件系统分类
根据其是否支持"journal" 功能:
日志型文件系统: ext3, ext4, xfs, ...
非日志型文件系统: ext2, vfat
文件系统的组成部分:
内核中的模块:ext4, xfs, vfat
用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat
Linux的虚拟文件系统:VFS(和不同的文件系统打交道)
查前支持的文件系统:cat /proc/filesystems
创建文件系统
mkfs 命令(make file system创建文件系统):
(1) mkfs.FS_TYPE /dev/DEVICE
文件系统类型:
ext4 例如创建ext4文件系统类型:mkfs.ext4
xfs 例如创建xfs文件系统类型:mkfs.xfs
btrfs 例如创建btrfs文件系统类型:mkfs.btrfs
vfat 例如创建vfat文件系统类型:mkfs.vfat
(2) -L 'LABEL': 设定标签,例如: mkfs.ext4 -L /mnt/sdb5 /dev/sdb5
mke2fs :ext 系列文件系统专用管理工具(默认是ext2)
-t {ext2|ext3|ext4}
-b {1024|2048|4096} :创建文件系统单位,分别是1k,2k,4k
-L 'LABEL' :给分区起标签
-j : 相当于 -t ext3
mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-i # : 为数据空间中每多少个字节创建一个inode ;此大小不应该小于block 的大小
例如: mkfs.ext4 -b 1024 -i 10240 -L /mnt/sdb5 /dev/sdb5
查看上面的例子的超级快信息:tune2fs -l /dev/sdb5
-N # : 指定分区中创建多少个inode
-I 一个inode 记录占用的磁盘空间大小,128---4096(必须为128的整数倍)
-m # : 默认5%,为管理人员预留空间占总空间的百分比
-O FEATURE[,...] :启用指定特性 例如: tune -O has_journal /dev/sdb5
-O ^FEATURE :关闭指定特性 例如: tune -O ^has_journal /dev/sdb5
blkid :查看指定块设备的属性信息
blkid [OPTION]... [DEVICE]
-U UUID: 根据指定的UUID 来查找对应的设备
-L LABEL :根据指定的LABEL 来查找对应的设备
e2label :管理ext 系列文件系统的LABEL
e2label DEVICE [LABEL]
findfs :查找分区
findfs [options] LABEL=<label>
findfs [options] UUID=<uuid>
tune2fs :重新设定ext 系列文件系统可调整参数的值
-l :查看指定文件系统超级块信息;super block
-L 'LABEL' :修改卷标
-m # :修预留给管理员的空间百分比
-j: 将ext2 升级为ext3
-O: 文件系统属性启用或禁用, –O ^has_journal
-o: 调整文件系统的默认 挂载选项,–o ^acl
-U UUID: 修改UUID号 (自动生成UUID命令:uuidgen)
dumpe2fs:
-h :查看超级 块信息,不显示分组信息
文件系统检测和修复
常发生于死机或者非正常关机之后
挂载为文件系统标记为“no clean” ”
注意:一定不要在挂载状态下修复
fsck: File System Check
fsck.FS_TYPE
fsck -t FS_TYPE
-p: 自动修复错误
-r: 交互式修复错误
FS_TYPE 一定要与分区上已有文件类型相同
e2fsck :ext 系列文件专用的检测修复工具
-y :自动回答为yes
-f :强制修复
挂载mount
挂载: 将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件
访问入口的行为
卸载: 为解除此关联关系的过程
把设备关联挂载点:mount Point
卸载时:可使用设备,也可以使用挂载点
挂载点下原有文件在挂载完成后会被临时隐藏
挂载点目录一般为空
用mount 命令挂载文件系统
挂载方法:mount DEVICE MOUNT_POINT
mount :通过查看/etc/mtab文件显示当前已挂载的所有设备
mount [-fnrsvw] [-t vfstype] [-o options] device dir
device :指明要挂载的设备;
(1) 设备文件:例如/dev/sda5
(2) 卷标:-L 'LABEL', 例如 -L 'MYDATA'
(3) UUID, -U 'UUID' :例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e'
(4) 伪文件系统名称:proc, sysfs, devtmpfs, configfs
dir :挂载点
事先存在;建议使用空目录
进程正在使用中的设备无法被卸载
mount 常用命令选项
-t :指定要挂载的设备上的文件系统类型(一般现在都不用,挂载的时候会自动识别
文件系统类型)
-r : readonly ,只读挂载
-w : read and write, 读写挂载
-n : 不更新/etc/mtab ,mount 不可见(隐藏挂载。但用cat /proc/mnt可以看
到被隐藏的)
-a :自动挂载所有支持自动挂载的设备( 定义在了/etc/fstab文件中,且挂载选项
中有auto 功能)
-L 'LABEL' : 以卷标指定挂载设备
-U 'UUID' : 以UUID 指定要挂载的设备
-B, --bind : 绑定目录到另一个目录上(例如:mount -B /boot /mnt/boot;用df是看不
到,df查看的是设备,而这是文件夹,用mount可以看到;cat /proc/mounts
也可以看到)
查看内核追踪到的已挂载的所有设备:
cat /proc/mounts(隐藏的也可以看到)
-o options :( 挂载文件系统的选项) ,多个选项使用逗号分隔
async :异步模式
sync :同步模式, 内存更改时,同时写磁盘
atime/noatime :包含目录和文件(例如:mount -o noatime /dev/sdb2 /mnt
/sdb2 ;stat 文件名:可以查看文件的‘三个’时间 )
diratime/nodiratime :目录的访问时间戳
auto/noauto :是否支持自动挂载, 是否支持-a 选项(配合/etc/fstab来用)
exec/noexec :是否支持将文件系统上运行应用程序
dev/nodev :是否支持在此文件系统上使用设备文件;(例如:
mount -o remount,nodev /mnt/sdd1 这样sdd1就不能用了
suid/nosuid :不否支持suid 和sgid 权限(例如:
mount -o remount,nosuid /mnt/sdd1 ;
这个命令执行之后即使/mnt/sdd1下面有suid权限的文件,普通
用户也不能继承)
remount :重新挂(例如:mount -o remount,exec /mnt/sdd1)
ro :只读(挂载默认rw,例如:mount -o remount,ro /mnt/sdd1
想要/mnt/sdd1只读可以用上面命令重新挂载)
rw: :读写
user/nouser :是否允许普通用户挂载此设备,配合/etc/fstab来使用
acl :启用此文件系统上的acl 功能
Defaults :相当于rw, nosuid, dev, exec, auto, nouser, async
(例如:mount /dev/sdd1 /mnt/sdd1 :默认就有上面的功能
例如:mount -o noexec /dev/sdd1 /mnt/sdd1:不能执行
在/mnt/sdd1下的脚本不能执行,但用bash运行脚本可以
执行)
查看挂载情况:
findmnt MOUNT_POINT 例如:findmnt LABEL="/mnt/sdb2"(卷标)
findmnt /dev/sdb2(设备)
findmnt /app/sdb2(挂载点)
查看正在访问指定文件系统的进程:
lsof MOUNT_POINT
fuser -v MOUNT_POINT
终止所有在正访问指定的文件系统的进程:
fuser -km MOUNT_POINT
卸载(取消挂载):
umount DEVICE
umount MOUNT_POINT
文件挂载配置文件( /etc/fstsb )
/etc/fstab 每行定义一个要挂载的文件系统,格式如下:
18.png 上图每行总共有6部分,一次的含义分别是:
<1> 要挂载的设备或伪文件系统:
设备文件
LABEL :LABEL=""
UUID :UUID=""
伪文件系统名称:proc, sysfs
<2> 挂载点
<3> 文件系统类型
<4> 挂载选项:defaults(默认rw, nosuid, dev, exec, auto, nouser, async)
<5> 转储频率:0 :不做备份; 1:每天转储; 2 :每隔一天转储
<6> 自检次序: 0 :不自检1 :首先自检;一般只有rootfs才用1
注意:如果再/etc/fstab/下面添加一行,如果想让挂载生效,那么久需要用命令:mount -a
如果生效之后又去修改/etc/fstab这个配置文件,把原来默认的default改为(或增添)一
些选项例如:acl ,那么如果想让其生效就不能用 :mount -a 这个命令了,因为此命令
是让没有挂载的生效,现在已经挂载上了,因此我们可以用命令:mount -o remount [挂载点]
挂载交换分区
启用:swapon
swapon [OPTION]... [DEVICE]
-a :激活所有的交换分区;
-p :指定优先级
-s : 查看swap信息
/etc/fstab:pri=value
禁用:swapoff [OPTION]... [DEVICE]
-a:禁用所有
给swap创建文件系统:
mkswap [DEV] :给swap创建文件系统不加卷标
mkswap [DEV] -L 卷标命 :给swap创建文件系统的同时加卷标
SWAP 的优先级:
1、可以指定swap 分区0 到32767的优先级,值越大优先级越高(可以在/etc/fstab文件里
的default后面指明优先级,例如:pri=100 表明指定的优先级为100)
2、如果用户没有指定,那么核心会自动给swap 指定一个优先级,这个优先级从-1开始,每加
入一个新的没有用户指定优先级的swap ,会给这个优先级减一
3、先添加的swap的缺省优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级(是正
数)永远高于核心缺省指定的优先级( 是负数)
4、优化性能:分布存放,高性能磁盘存放
移动介质
1、挂载意味着使外来的文件系统看起来如同是主目录树的一部分
2、访问前、介质必须被挂载
3、摘除时,介质必须被卸载
4、按照默认设置,非根用户只能挂载某些设备(光盘、DVD 、软盘、USB 等等)
5、挂载点通常在/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
cdrecord -v centos.iso
挂载USB 介质
查看USB 设备是否识别
lsusb
被内核探测为SCSI 设备
/dev/sdaX 、/dev/sdbX 、或类似的设备文件
在图形环境中自动挂载
图标在[ 计算机] 窗口中创建
挂载在/run/media/<user>/<label>
手动挂载
ount /dev/sdb1 /mnt
free、df、du 命令:
内存空间使用状态:
free [OPTION]
-m: 以MB 为单位
-g: 以GB 为单位
文件系统空间占用等信息的查看工具:
df [OPTION]... [FILE]...
-H 以1000 为单位
-h: human-readable
-T 文件系统类型
-i :inodes instead of blocks
-P: 以Posix 兼容的格式输出
查看某目录总体空间占用状态:
du [OPTION]... DIR
-h: human-readable
-s: 当前整个目录总的大小(默认列出当前各个目录的大小),以K为单位
工具dd
dd 命令:convert(转换) and copy a file
用法:
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
bs=# :block size, 复制单元大小(一次读多少)
count=# :复制多少个bs
if=file 从所命名文件读取而不是从标准输入(输入文件,就是从哪个文件读数据)
of=file 写到所命名的文件而不是到标准输出(输出数据到哪个文件)
bs=size 指定块大小(既是ibs 也是obs)
ibs=size 一次读size 个byte
obs=size 一次写size 个byte
cbs=size 一次转化size 个byte
skip=blocks 从源文件(if)开头忽略blocks 个ibs 大小的块
seek=blocks 从目标文件(of)开头忽略blocks 个obs 大小的块
count=n 只拷贝n 个记录
conv=conversion[,conversion...] 用指定的参数转换文件
转换参数(conversion):
ascii 转换 EBCDIC 为 ASCII
ebcdic 转换 ASCII 为 EBCDIC
lcase 把大写字符转换为小写字符
ucase 把小写字符转换为大写字符
nocreat 不创建输出文件
noerror 出错时不停止
notrunc 不截短输出文件
例如:dd if=f1 of=f2 bs=1 count=2 skip=3 seek=4 conv=notrunc
sync 把每个输入块填充到ibs 个字节,不足部分用空(NUL)字 字
符补齐
备份MBR:
备份MBR:
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
破坏MBR中的bootloader:
dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446
有一个大与2K的二进制文件fileA 。现在想从第64个字节位置开始读取,需要读取的大小
是128Byts 。又有fileB, 想把上面读取到的128Bytes 写到第32个字节开始的位置,替
换128Bytes ,实现如下:
dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrun
备份:
将本地的/dev/sdx 整盘备份到/dev/sdy :
dd if=/dev/sdx of=/dev/sdy
将/dev/sdx 全盘数据备份到指定路径的image 文件 :
dd if=/dev/sdx of=/path/to/image
备份/dev/sdx 全盘数据,并利用gzip 压缩,保存到指定路径 :
dd if=/dev/sdx | gzip >/path/to/image.gz
恢复:
将备份文件恢复到指定盘:
dd if=/path/to/image of=/dev/sdx
将压缩的备份文件恢复到指定盘:
gzip -dc /path/to/image.gz | dd of=/dev/sdx
拷贝内存资料到硬盘(备份内存):
将内存里的数据拷贝到root目录下的mem.bin 文件
dd if=/dev/mem of=/root/mem.bin bs=1024
从光盘拷贝iso 镜像
拷贝光盘数据到root 文件夹下,并保存为cd.iso 文件:
dd if=/dev/cdrom of=/root/cd.iso
销毁磁盘数据
利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数,执行此操作以后,/dev/sda1将无
法挂载,创建和拷贝操作无法执行。
dd if=/dev/urandom of=/dev/sda1
得到最恰当的block size :
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
dd if=/dev/zero of=/root/1Gb.file bs=2048 count=1000000
dd if=/dev/zero of=/root/1Gb.file bs=4096 count=1000000
通过比较dd指令输出中所显示的命令执行时间,即可确定系统最佳的block size 大小
测试硬盘速度
测试硬盘写速度
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
测试硬盘读速度
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
修复硬盘:
dd if=/dev/sda of=/dev/sda
当硬盘较长时间(比如1,2 年)放置不使用后,磁盘上会产生消磁点。当磁头读到这些区域时
会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。
上边的命令有可能使这些数据起死回生,且这个过程是安全高效的
网友评论