文件系统与分区
磁盘:
设备类型:
块设备:block,磁盘
字符设备:char,键盘
brw-rw----. 1 root disk 8, 0 Nov 3 09:42 sda
主设备号 次设备号
查看硬盘类型:
cat /sys/block/sda/queue/rotational
0 --表示固态硬盘
1 --表示机械硬盘
head:磁头
track:磁道
cylinder:柱面
sector:扇区,512bytes
寻址方式:
CHS采用24bit寻址
前10位表示cyliner(1024),中间8位表示head(255),后6位表示sector(63)
每扇区512位:
最大寻址空间8G:1024*255*63*512
LBA
ATA-1中定义了28位寻址模式,以每扇区512位来计算,上限为128GiB
ATA-6规范中采用48位LBA,同样以每扇区512位组计算容量上限为128Petabytes
分区:
一,分区的好处:
优化I/O性能
实现磁盘空间配额限制
提高修复速度
隔离系统和程序
安装多个OS
采用不同文件系统
二,分区方式:
MBR和GPT
分区表备份:
dd if=/dev/sda of=/data/dpt bs=1 count=66 skip=446 跳过(源)sda的前446个字节,备份后66个字节
破坏分区表:
dd if=/dev/zero of=/dev/sda bs=1 count=2 seek=510 跳过(目标)sda的前510个字节,只破坏最后2个字节
还原:
dd if=/dev/dpt of=/dev/sda ba=1 count=2 skip=64 seek=510 跳过(源)dpt前64字节,(目标)sda前510字节,进行恢复
hexdump -C -n 512 /dev/sda --查看/dev/sda的前512个字节
三,分区工具:
fdisk 用于MBR分区
gdisk 用于GPT分区
parted 高级分区操作
新添加磁盘后可以通过该命令扫描磁盘:
echo '- - -' > /sys/class/scsi_host/host0/scan 或
echo '- - -' > /sys/class/scsi_host/host2/scan
(1)parted用法:
select /dev/sdb 选择sdb磁盘
mklabel gpt|msdos 创建标签,gpt或msdos
print 看分区信息
mkpart sdb1 1 200 (默认M),sdb1为分区名称,1位起始,200为结束
rm 1 删除1分区
parted –l 列出分区信息
示例:
[root@server ~]# parted
(parted) select /dev/sdb //选择磁盘sdb
Using /dev/sdb
(parted) mklabel gpt //将MBR磁盘格式化为GPT
(parted) mkpart
Partition name? []?
File system type? [ext2]?
Start? 0
End? 2996G //0 - 2996GB
0表示分区的开始 -1表示分区的结尾 意思是划分整个硬盘空间为主分区
(2)fdisk,gdisk用法:
子命令:
p 分区列表
t 更改分区类型
n 创建新分区
d 删除分区
v 校验分区
w 保存并退出
q 不保存并退出
四,查看分区:
1,fdisk -l /dev/sdv
2,ls /dev/sdb*
3,cat /proc/partitions 查看内核是否已经识别新的分区
4,lsblk
五,同步分区表:
centos5/centos7:
partprobe /dev/sdb centos6使用partprobe会出现问题
centos6:(通知内核重新读取硬盘分区表)
kpartx -a /dev/sdb -f:force
partx -a /dev/sdb --加分区
partx -d -nr 2-3 /dev/sdb --删除分区
查看支持的文件系统:
ll /lib/modules/`uname -r`/kernel/fs
Linux的虚拟文件系统:VFS
六,格式化分区:
创建xfs文件系统
mkfs.xfs -t FS_TYPE -L 'LABEL' /dev/DEVICE
创建ext文件系统
mke2fs:ext系列文件系统专用管理工具
-t {ext2|ext3|ext4} 指定文件系统类型
-b {1024|2048|4096} 指定块大小
-L ‘LABEL’ 设置卷标
-j 相当于 -t ext3
mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-i # 为数据空间中每多少个字节创建一个inode;不应该小于block大小
-N # 指定分区中创建多少个inode
-I 一个inode记录占用的磁盘空间大小,128---4096
-m # 默认5%,为管理人员预留空间占总空间的百分比
-O FEATURE[,...] 启用指定特性
-O ^FEATURE 关闭指定特性
blkid:块设备属性信息查看
e2label:管理ext系列文件系统的LABEL
e2label /dev/sdb1 sdb1-1 修改sdb1的LABEL为sdb1-1
findfs:查找分区
findfs LABEL=sdb1-1 查找LABEL为sdb1-1的设备
findfs UUID=***
tune2fs:重新设定ext系列文件系统可调整参数的值
tune2fs -l /dev/sdb1
-l 查看指定文件系统超级块信息;super block
-L 'LABEL’ 修改卷标
-m 修预留给管理员的空间百分比
-j 将ext2升级为ext3
-O 文件系统属性启用或禁用, –O ^has_journal
-o 调整文件系统的默认挂载选项,–o ^acl
-U UUID 修改UUID号
dumpe2fs:显示ext文件系统信息,将磁盘块分组管理
-h:查看超级块信息,不显示分组信息
xfs_info:显示已挂载的 xfs 文件系统信息
xfs_info mountpoint
七,挂载文件系统:
mount /dev/DEVICE MOUNT_POINT
centos6:
mknod /dev/loop8 -b 7 8 --手动创建loop设备
vim /boot/grub/grub.conf
max_loop=100 重启系统会自动生成100个loop设备
losetup /dev/loop8 /data/disk1 --将shebloop8与文件disk1关联
losetup -a --查看关联信息
mount /dev/loop8 /mnt/disk1
查看挂载情况
findmnt MOUNT_POINT|device --finemnt /dev/sdb5
查看正在访问指定文件系统的进程
lsof MOUNT_POINT
fuser -v MOUNT_POINT --可以看到使用设备的用户
终止所有在正访问指定的文件系统的进程
fuser -km MOUNT_POINT
八,卸载文件系统
umount DEVICE/MOUNT_POINT
uuidgen --生成UUID
九,文件挂载配置文件
/etc/fstab每行定义一个要挂载的文件系统
1、要挂载的设备或伪文件系统设备文件
LABEL:LABEL=""
UUID:UUID=""
伪文件系统名称:proc, sysfs
2、挂载点
3、文件系统类型:ext4,xfs,iso9660,nfs,none
4、挂载选项:defaults ,acl,bind
5、转储频率:0:不做备份 1:每天转储 2:每隔一天转储
6、fsck检查的文件系统的顺序:允许的数字是0 1 2
0:不自检
1:首先自检;一般只有rootfs才用
2:非rootfs使用
十,文件系统检测和修复:
文件系统夹故障常发生于死机或者非正常关机之后,挂载为文件系统标记为“no clean”
注意:一定不要在挂载状态下执行下面命令修复
fsck: File System Check
fsck.FS_TYPE
fsck -t FS_TYPE
注意:FS_TYPE 一定要与分区上已经文件类型相同
-a 自动修复
-r 交互式修复错误
e2fsck:ext系列文件专用的检测修复工具
-y 自动回答为yes
-f 强制修复
-p 自动进行安全的修复文件系统问题
xfs_repair:xfs文件系统专用检测修复工具
-f 修复文件,而设备
-n 只检查
-d 允许修复只读的挂载设备,在单用户下修复 / 时使用,然后立即reboot
示例1:
扩展swap空间
1,在sdb新建分区sdb1,size为2G,类型为82(swap)
fdisk /dev/sdb
2,将分区写入特殊签名swap:
mkswap /dev/sdb1
3,激活交换空间,将swap信息写入/etc/fstab中
UUID=*** swap swap defsults 0 0
4,激活swap
swapon -a
5,查看swap信息
swapon -s
修改swap优先级(有多个分区作为swap空间):
1,修改/etc/fstab文件中swap行,defaults修改为pri=VALUE,VALUE为优先级
2,禁用swap
swapoff -a
3,激活swap
swapon -a
可以指定swap分区0到32767的优先级,值越大优先级越高
以文件作为swap空间使用:
1,创建swapfile文件
dd if=/dev/zero of=/swapfile bs=1M count=2048
2,将分区写入特殊签名:
mkswap swapfile
3,信息写入/etc/fstab中,只能用文件名,不能使用UUID
/swapfile swap swap defaults 0 0
4,激活swap
swapon -a
文件夹挂文件夹
/boot /mnt/boot none bind 0 0
挂载光盘
/dev/sro /mnt/cdrom iso9660 defaults 0 0
示例2:
迁移home到新的分区
(建议在维护模式,init 1)
1,新建分区/dev/sda3
fdisk /dev/sda
2,同步分区表
partprobe
3,创建文件系统mkfs
mkfs.xfs /dev/sda3
4,新建一个目录用于存放home数据
mkdir /mnt/home
5,将/mnt/home挂载给将来home要使用的分区
mount /dev/sda3 /mnt/home
6,将home目录下的数据拷贝到/mnt/home
cp -a /home/* /mnt/home/
7,删除home中的数据(生产环境需要观察一段时间,运行无误后再删除)
rm -rf /home/*
8,卸载/mnt/home,并挂载home到/dev/sda3
umount /mnt/home
mount -a