linux磁盘及文件系统管理
磁盘分区及文件系统管理
RAID设备
LVM: 磁盘的动态编辑管理
CPU, memory(RAM), I/O
I/O设备: Disks, Ethercard (网卡)
Disks: 实现持久存数数据
接口类型:
IDE(ata): 并口 理论速度: 133MB/s
SCSI: 并口 640MB/s
SATA: 串口 SATA3理论速度: 6gbps
SAS: 串口 6gbps
USB: 串口, 480MB/s
并口: 同一线缆可以接多块设备
IDE: 两个,主,从
SCSI:
宽带: 16-1
窄带: 8-1
串口:同一线缆只能接一台设备
硬盘: 机械硬盘, 固态硬盘
机械硬盘:
head: 磁头
cylinder: 柱面
secotr: 扇区
track: 磁道
设备类型:
块设备(block): 随机访问, 数据交换单位是"块"
字符设备(character): 线性访问,数据交换单位是"字符"
设备文件: FHS
/dev
设备文件: 用来关联至设备的驱动程序;设备的访问入口
设备号:
major: 主设备号,区分设备类型,用于表明设备所需要的驱动程序
minor: 次设备号,区分同种类型下的不同设备,是特定设备的访问入口
mknod 命令:
make block or character special files
用来创建字符或块设备的特殊文件
mknod [OPTION]… NAME TYPE [MAJOR MINOR]
[option]
-m MODE: 创建后文件的访问权限
使用系统调用中的的设备文件更改权限的系统调用来更改权限
设备文件名: ICANN,互联网名称地址分配机构制定命名规则
磁盘:
IDE: /dev/hd[a-z]
例如:hda,hdb…
SCSI, SATA, SAS, USB: /dev/sd[a-z]
分区:
/dev/sda#:
/dev/sda1, /dev/sda2, …
注意: CentOS 6和7 将硬盘设备文件标志位/dev/sd[a-z]#
CHS
引用设备的方式:
设备文件名
卷标LABEL
UUID
磁盘分区:
一、为什么分区:
优化I/O性能
实现磁盘空间配额限制
提高修复速度
隔离系统和程序
安装多个OS
采用不同文件系统
二、分区方式: MBR, GPT
MBR:
使用32位表示扇区数, 分区不能超过2T
0编号扇区被当做mbr, Master Boot Record, 主引导记录扇区
共512个字节分为三部分:
446 bytes: bootloader, 程序, 引导启动操作系统的程序
64 bytes: FAT ,文件系统分区表, 每16字节标示一个分区, 一共只能有4个分区
2 bytes: MBR区域的有效性标识; 55AA为有效
MBR备份
新挂载的磁盘: lsscsi 查看首位的设备号
扫描磁盘: echo "- – -" > /sys/class/scsi_host/host2/scan(按照lsscsi查看到的首位设备号,选择host)
备份: dd if=/dev/sda of=/root/mbr bs=1 count=512
查看mbr内容: hexdump -C mbr
显示分区信息: fdisk -l
恢复分区信息: dd if=mbr of=/dev/sdb
fdisk -l /dev/sda
清零boot loader: dd if=/dev/zero of=/dev/sdb bs=1 count=446
fdisk -l /dev/sdb
hexdump -C -n 512 /dev/sdb
hexdump -C -v -n 512 /dev/sdb
清零分区表: dd if=/dev/zero of=/dev/sdb bs=1 count=64 skip=446 seek=446
主分区和扩展分区的标识: 1-4
逻辑分区: 只能从5开始
GPT: GUID partition table
lsblk 列出块设备
查看分区信息: lsblk, fdisk -l /dev/sd*, cat /proc/partition
三、fdisk命令: manipulate disk partition table, 管理磁盘分区表
1、查看磁盘分区信息
fdisk -l [device]… 列出指定磁盘设备上的信息
start 和 end: centos 6 是柱面, centos 7是扇区
2、管理分区
fdisk device
fdisk提供了一个交互式接口来管理分区,有许多子命令,分别用于不同的管理功能;所有的操作均在内存中完成,没有直接同步到磁盘上;直到使用 w 命令保存至磁盘
常用命令:
n:创建新分区
d:删除已有分区
t:修改分区类型
l:查看所有已知ID
w:保存并退出
q:不保存退出
m:查看帮助信息
p: 显示现有分区信息
注意:在已经分区并且已经挂载其中某个分区的磁盘设备上创建的新分区,内核可能在创建完成后无法直接识别,要使内核强制识别
查看:cat /proc/partitions
通知内核强制重读磁盘分区表,有时可能需要执行多次命令
centos 5, 7: partprobe [device]
centos 6, 7: partx,kpartx
partx -a [device]
kpartx -af [device]
分区创建工具: parted,sfdisk
四、创建文件系统:
1、格式化:
低级格式化: 主要目的是在出厂时划分磁道,形成簇;
高级格式化: 分区之后, 对分区进行, 主要是为了创建文件系统
2、文件的元数据中不包含文件名,文件名存放在目录上
元数据区和数据区: inode(index node)
文件元数据: 大小, 权限, 属主属组, 时间戳, 数据块指针 等
符号链接文件: 存储数据指针的空间当中存储的是真实文件的访问路径
设备文件: 存数数据的空间当中存储的是设备号(major, minor)
3、VFS: Virtual File System(虚拟文件系统)(任何两个文件系统不能直接链接时, 都能通过添加中间层解决, 这个中间层就是VFS)
linux的文件系统: ext2, ext3, ext4, xfs, reiserfs, btrfs
光盘: iso9660
网络文件系统: nfs, cifs
集群文件系统: gfs2, ocfs2
内核级分布式文件系统: ceph
windows文件系统: vfat, ntfs
伪文件系统: proc, sysfs, tmpfs, hugepagefs
Unix文件系统: UFS, FFS, JFS
交换文件系统: swap
用户控件的分布式文件系统: mogilefs, moosefs, giusterfs
cat /etc/issue 查看Linux的发行版本
uname -r 查看内核的版本
fdisk分区完成后,使用partx -a /dev/sda 刷新启动分区
调整分区号之后,使用kpartx -af /dev/sda 刷新分区
1、文件系统管理工具
创建文件系统的工具
mkfs
mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.xfs, mkfs.vfat
检测和修复文件系统的工具
fsck
fsck.ext2, fsck.ext3
查看其属性的工具
dumpe2fs, tune2fs
调整文件系统特性
tune2fs
2、内核及文件系统的组成部分
文件系统驱动: 由内核提供
lsmod 查看系统已经加载的模块
文件系统管理工具: 由用户空间的应用程序提供
3、ext系统文件系统的管理工具:
mkfs.
使用mkfs命令格式化硬盘后,使用blkid /dev/sda3 查看对应设备的信息
UUID: 通用唯一标识符库
mkfs -r ext2 <==> mkfs.ext2
ext系列文件系统专用管理工具: mke2fs
mke2fs [OPTION] device
-t{ext2|ext3|ext4}: 指明要创建的文件系统类型
-b{1024(1K)|2048(2K)|4096(4K)}: 指明文件系统
的块大小
-L LABEL: 指明卷标
-j: 创建有日志功能的文件系统ext3
创建有日志功能的ext3文件系统的方法:
mke2fs -j = mkfs.ext3 =mkfs -t ext3 = mke2fs -t ext3
-i #: 每少个字节有一个inode
-N #: 直接指明要给此文件系统创建的inode的数量
-O[^]FEATURE: 以指定的特性创建目标文件系统,加^关闭特性,不加启用特性
-m #: 指定预留空间, 百分比数值,不需要加% 和换算
卷标管理: e2label命令
查看: e2label device
设定: e2label device LABEL
tune2fs命令: 查看或修改ext系列文件系统的某些属性;
adjust tuneable filesystem parameters on ext2/ext3/ext4 filesystem
注意: 块大小创建后不可修改;
tune2fs [OPTIONS] device
options
-l: 查看超级块信息
修改指定文件系统的属性
-j: ext2 –> ext3,无损升级,对数据没有损害,添加日志选项
-L LABEL:修改卷标
-m #: 修改预留空间百分比
-O[^]FEATURE :开启或关闭某种特性
-o[^]mount_options: 开启或者关闭某种默认的挂载选项
acl: 访问控制列表
uuidgen命令: 生成新的随机UUID
dumpe2fs命令: 显示ext系列文件系统的属性信息
dumpe2fs [-l] device
[h]
用于实现文件系统检测的工具
因进程意外终止或系统崩溃等原因导致写入操作非正常终止时, 可能会造成文件损坏, 此时, 应该检测并修复文件系统. 建议, 离线进行
ext系列文件系统专用工具
e2fsck: check a Linux ext2/ext3/ext4/ file system
e2fsck [OPTIONS] device(分区)
-y: 对所有问题,自动回答为yes
-f: 即使文件系统处于clean状态,也要强制进行检测
fsck: 通用命令,check and repair a Linux file system
-t fstype: 指明文件系统类型 man fsck.
-a: 无须交互自动修复所有错误
-r: 交互式修复
CentOS 6如何使用xfs文件系统:
可以联网
# yum install xfsprogs -y
内网:
事先:
cd /etc/yum.repo.d
wget http://xx.xx.xx.xx/centos6.8.repo
mv CentOS-BASE.repo CentOS-base.repo.bak
创建:mkfs.xfs
检测: fsck.xfs
blkid命令:
blkid device : 查看对应设备的相关属性信息
blkid -L LABEL:根据指定的LABEL定位设备
blkid -U UUID: 根据UUID定位设备
swap文件系统
Linux上的交换分区必须使用独立的文件系统(独立的分区)
且文件系统的System ID必须为82;
创建swap设备: mkswap命令
mkswap [options] device
-L label: 指明卷标
-f: 强制
修改/etc/fstab
使用 swapon -a 生效
swapon -s 查看swap信息
调整swap的优先级时
swap的优先级:
可以指定swap分区0-32767的优先级, 值越大优先级越高; 如果没有用户指定, 那么内核会自动给swap指定一个优先级, 这个优先级从-1开始, 每加入一个新的没有用户指定优先级的swap, 会给这个优先级减一; 同时, 先添加的swap的缺省优先级比较高, 除非用户自己指定一个优先级, 而用户指定的优先级用于高于内核缺省指定的优先级.
Windows无法识别Linux的文件系统;因此, 存储设备需要在两种设备之间交叉使用时,应该使用windows和linux同时支持的文件系统fat32(vfat)
# mkfs.vfat device
分区,格式化,修改配置文件,挂载
文件系统的使用
首先要"挂载": mount命令和umount命令
根文件系统之外的其他文件系统想要能够被访问,都必须通过"关联"至根文件系统上的某个目录来实现,此管关联操作即为"挂载";此目录即为"挂载点";
挂载点: mount point,用于作为另一个文件系统的访问入口
(1)事先存在
(2)应该使用未被或不会被其他进程使用到的目录
(3)挂载点下原有的文件将会被隐藏
mount命令:
mount [-fnrsvw] [-f vfstype] [-o options] device dir
mount[command options] [-f] [挂载选项]
命令选项:
-a: auto, 自动挂载
-r: read only, 只读挂载
-w: read and write, 读写挂载(默认)
-n: 默认情况下, 设备挂载或卸载的操作会同步更新至/etc/mtab文件中, -n用于禁用此特性
-t vfstype: 指明要挂载的设备上的文件系统的类型; 多数情况下可以省略,此时mount会通过blkid来判断要挂载的设备的文件系统类型
-L LABEL: 挂载时以卷标的方式指明设备
mount -L LABEL dir
-U UUID: 挂载是以UUID的方式指明设备
mount -U UUID dir
-o options: 挂载选项,挂载后启用的特性
sync/async: 同步/异步操作;
atime/noatime: 文件或目录在被访问时是否更新其访问时间戳
diratime/nodiratime: 目录在被访问时是否更新其访问时间戳
remount: 重新挂载
acl: 支持使用facl功能
示例: mount -o remount,acl /dev/sda3 /mnt
或者: tune2fs -o acl device
dev/nodev: 此设备上是否允许创建设备文件
exec/noexec: 是否允许运行此设备上的程序文件
auto/noauto:
user/nouser: 是否允许普通用户挂载此文件系统
suid/nosuid: 是否允许程序文件上的suid和sgid特殊权限生效
defaults: Use default options: rw, suid, dev, exec, auto, nouser, async, and relatime
fuser命令,查看谁在使用挂载点的设备
fuser -km /device (一般在紧急情况使用)
一个使用技巧:
可以实现将目录绑定至另一个目录上,作为其临时访问入口
mount –bind 源目录 目标目录
例如: 本机目录挂载目录
修改/etc/fstab配置文件
/boot /mnt/boot none bind 0 0
mount -a
查看当前系统所有已经挂载的设备
# mount
# cat /etc/matb
# cat /proc/mounts
挂载光盘:
mount -r /dev/cdrom mount_point
光盘的设备文件: /dev/cdrom ,/dev/dvd, /dev/sr0
挂载U盘:
事先识别U盘的设备文件
挂载本地的回环设备:
# mount -o loop /PATH/TO/SOME_FILE MOUNT_POINT
命令 losetup
umount命令:
卸载时只需要 umount device|dir
注意: 正在被进程访问到的挂载点无法被卸载
查看哪个或哪些进程所占用
# lsof MOUNT_POINT
# fuser -v MOUNT_POINT
终止所有正在访问某挂载点的进程
# fuser -km MOUNT_POINT
交换分区的启用和禁用:
创建交换分区的命令: mkswap
启用: swapon
swapon [OPTION] [DEVICE]
-a: 定义在/etc/fstab文件中的所有的swap设备
-p PRIORITY: 指定优先级
/etc/fstab: pri=value
禁用: swapoff
swapoff device
设定除根文件系统以外的其它文件系统能够开机时自动挂载: /etc/fstab文件
每行定义一个要挂载的文件系统及相关属性:
6个字段:
(1)要挂载的设备
设备文件:
LABEL
UUID
伪文件系统: 例如sysfs, proc, tmpfs等
(2)挂载点
swap类型的设备的挂载点为swap
(3)文件系统类型:
(4)挂载选项
defaults: 使用默认挂载选项
如果要同时指明多个挂载选项,彼此间以逗号(,)分隔即可
defaults,acl,noatime,noexec
(5)转储频率
0: 从不备份
1: 每天备份一次
2: 每隔一天备份
(6)自检次序
0: 不自检
1: 首先自检,通常只能是根文件系统可用1
2: 次级自检
…到9
mount -a: 可自动挂载定义在/etc/fstab文件中所有支持自动挂载的设备
df 和du 命令
df命令: 查看磁盘状态
df [option]… [file]…
-l: 只显示本地文件系统的相关信息
-h: 人类易于读懂的human-readable
-i: 显示inode使用状况,而非blocks
du命令:
查看文件的大小
du [option]… [file]…
-s: sumary 和
-h: human-readable
dd命令: 复制和改变文件
用法: dd if=/PATH/FROM/SRC of=/PATH/TO/DEST bs=# count=#
if=file: 从所命名文件读取而不是从标准输入
of=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: 把小写字符转换为大写字符
nocreat: 不创建输出文件
noerror: 出错时不停止
notrunc: 不截断输出文件
sync: 把每个输入块填充到ibs个字节, 不足部分用空(null)字符补齐
原创文章,作者:black_fish,如若转载,请注明出处:http://www.178linux.com/39872