码迷,mamicode.com
首页 > 其他好文 > 详细

磁盘存储和文件系统管理

时间:2018-07-14 11:45:25      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:成员   dfs   分类   忽略   raid 1   vma   访问   data   reduce   

本章内容
磁盘结构
分区类型
管理分区
管理文件系统
挂载设备
管理虚拟内存
RAID管理
LVM管理
LVM快照
设备类型:
块设备:block,存取单位“块”,磁盘
字符设备:char,存取单位“字符”,键盘
磁盘管理
cp /dev/sda /data/相当于复制的sda下的数据
cp -a /dev/sda /data/复制文件
I/o 性能:磁盘读写,网络或者本地
分区:
两种分区方式
MBR,MBR支持最大2TB磁盘,它无法处理大于2TB容量的磁盘。MBR还只支持最多4个主 分区
GPT 磁盘驱动器容量可以大得多,大到操作系统和文件系统都没法支持。它同时还支持几乎 无限个分区数量
MBR: Master Boot Record,1982年,使用32位表示扇区数,分区不超过2T
如何分区:按柱面
0磁道0扇区:512bytes
446bytes: boot loader
64bytes:分区表
16bytes: 标识一个分区
2bytes: 55AA
4个主分区;3主分区+1扩展(N个逻辑分
hexdump -C :一二进制呈现
hexdump -C /dev/sda | less :一二进制呈现
创建设备文件
mkond 创建特殊类别的设备文件 块设备文件b 字符设备文件c
mknod /app/sda b 8 0
mknod /app/zhongduan1 c 4 1
 
命名规则
centos5及之前
ide /dev/hda
/dev/hdb
...
/dev/hdaa
sata/sas/scsi/usb /dev/sda
/dev/sdb
 
centos6及之后
sata/sas/scsi/usb/ide /dev/sda
 
kvm虚拟机的虚拟硬盘 /dev/vda
xen虚拟机的虚拟硬盘 /dev/xvda
vmware的虚拟硬盘 /dev/sda
 
 
如果要加硬盘的话需要把硬盘的名字改下,
sda 8:0 0 120G 0 disk
├─sda1 8:1 0 300M 0 part /boot
├─sda2 8:2 0 20G 0 part /
├─sda3 8:3 0 10G 0 part /app
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 2G 0 part [SWAP]
sr0 11:0 1 1024M 0 rom
sda 和sdb 的名字在6和7系统上会改变
 
虚拟磁盘:/dev/vd
不同磁盘标识:a-z,aa,ab…
/dev/sda, /dev/sdb, ...
同一设备上的不同分区:1,2, ...
/dev/sda1, /dev/sda5
硬盘存储术语
head:磁头
track:磁道
cylinder: 柱面
有几个磁道就有几个磁柱
sector: 扇区,一个扇区是 512bytes字节
磁盘的三围
c:2^10=1024
h:2^8=256
s:2^6=64
一个扇区大小512byte
256*64*1024*512/1024/1024/1024=8GB
CHS表示最早的8G
8G以上的用LBA表示
 
 
1 分区 :查看分区方式:fidisk -l 主分区:一个字节是8位 4个字节=32位 就是 2的32次方 扩展分区
2 创建文件系统
3 挂载:文件分配目录名
 
 
 
 
K, M, G, T, P, E, Z, Y, B, N, D
 
 
1.BIOS basic input/output system 自检
 
2.由第一启动项,引导OS
 
3.MBR Master boot record 主引导记录
446 boot loader
lilo linux loader
grub
grub2
16*4=64 分区
 
55 AA 结束位
 
2^8 2^10 2^6
256 1024 64
h:磁头 c柱面 s扇区
100号5单元1501
200号7单元201
 
16字节 CHS 24bit
分区是否活动 head 扇区6 2+ 8 =10 柱面 分区的类型 head 扇区6 2+ 8 =10 柱面
1 2 3 4 5 6 7 8
 
 
 
9 16
 
 
dd命令
skip=xxx 是在备份时对if后面的部分也就是原文件跳过多少块
seek=xxx 是在备份时对of后面的部分也就是目标文件跳过多少块开始写
 
实验一:备份mbr,并破坏,再恢复
1.备份分区表:mbr 用hexdump -C /dev/sda -n 521 查看硬盘分区表前521个字节
dd if=/dev/sda of=/app/mbr.img bs=1 count=512 生成一个文件放在/app/mbr.img 读一 字节,读512次 最后生成一个文件
如果放在本地硬盘,系统如果起不来,硬盘则读不出数据,所以备份到网络
 
2.将mbr.img 复制到其他主机 sz /app/mbr.img
scp(复制) /索要备份的内容 192.168.30.128:/备份到的地方(远程主机)/
3.破坏mbr
 
5.在另一个主机上将被破坏的硬盘添加
6.在vmware虚拟机,新加硬盘不用重启的生效方法
echo ‘- - -‘ > /sys/class/scsi_host/host0/scan
7.恢复
dd if=mbr.img of=/dev/sdb
8.poweroff
9.开启被恢复的主机
10.从恢复机中删除故障硬盘.
 
 
 
实验二:仅破坏分区表,并恢复.
dd if=/dev/zero of=/dev/sda bs=1 count=64 seek=446
dd if=/app/mbr.img of=/dev/sda bs=1 count=64 skip=446 seek=446
 
实验三:新增硬盘sdb,并使用sda的mbr备份来恢复sdb的分区表
dd if=/app/mbr.img of=/dev/sdb bs=1 count=66 skip=446 seek=446
 
管理分区
lsblk
所有的块设备
列出块设备
? lsblk
创建分区使用:
? fdisk 创建MBR分区
? gdisk 创建GPT分区
? parted 高级分区操作
partprobe-重新设置内存中的内核分区表版本
 
 
parted 支持msdos (MBR)和gpt
交互和非交互
parted /dev/sda
parted -l 列出所有硬盘的分区信息
parted /dev/sda print 列出指定硬盘的分区
parted /dev/sdb mklabel msdos 设置硬盘的分区类 型
或gpt
parted /dev/sdb mklabel msdos -s 自动回答yes
parted /dev/sdb mkpart primary 1 2G primary :主分区
parted /dev/sdb mkpart primary 2G 4G
parted /dev/sdb mkpart primary 4G 6.5G
parted /dev/sdb mkpart extended 6.5G 21.5G
parted /dev/sdb mkpart logical 6.5G 7G
 
 
fdisk 支持msdos,在centos7中也支持gpt(不建议使用)
fdisk -l 查看所有硬盘的分区信息
fdisk -l /dev/sda 查看指定硬盘的分区信息
fdisk /dev/sdb 创建分区
o 设置msdos分区表
g 设置gpt分区表(不建议使用)
m 帮助
n 创建分区
p 主分区
e 扩展分区 (请把所有空间分给扩展)
起始的扇区数 一般直接回车,取可用的最小扇区
结束的扇区数 一般用+XX K/M/G 来指定具体分多少大小的分区
 
q 退出不保存
w 退出并保存
t 设置分区的类型
d 删除指定分区
a 设置该分区为启动分区,或设置为非启动
p 显示分区表
u 更新显示分区起止的单位,在扇区和柱面之间切换
 
非交互方式
echo -e "n\np\n\n\n+1G\nw\n" |fdisk /dev/sdb &> /dev/null
 
 
gdisk 只能划分gpt分区
gdisk -l 列出所有硬盘分区表
gdisk /dev/sdb 对分区进行划分
o 创建gpt分区表
m 帮助
n 创建分区
起始的扇区数 一般直接回车,取可用的最小扇区
结束的扇区数 一般用+XX K/M/G 来指定具体分多少大小的分区
q 退出不保存
w 退出并保存
t 设置分区的类型
L 查看分区的类型所对应的代码表示方式
d 删除指定分区
p 显示分区表
 
非交互方式
echo -e "n\n\n\n+2G\n\nw\ny\n" |gdisk /dev/sdb
 
 
 
对于非系统所在硬盘,内核自动更新分区表,而对于系统所在硬盘,不能直接列新,要使用以下命令
通知内核读取分区表
cenots5\centos7: partprobe (centos6不可用)
centos6:partx -a /dev/sda 添加
partx -d --nr /dev/sda7 删除
同步分区表
查看内核是否已经识别新的分区:
cat /proc/partitions :当前内核所加载的分区表
8 0 125829120 sda
8 1 307200 sda1
8 2 33562624 sda2
8 16 20971520 sdb
8 17 2097152 sdb1
8 18 2097152 sdb2
11 0 1048575 sr0
253 0 20971520 dm-0
253 1 2097152 dm-1
253 2 10485760 dm-2
8 32 10485760 sdc
8 33 1048576 sdc1
8 34 1048576 sdc2
253 3 307200 dm-3
253 4 307200 dm-4
 
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]
 
日志:
/var/log/httpd/access_log
redo log
张三 8000 +1000
李四 10000
partprobe /dev/sdb
ext2 3 journal
 
inode bitmap
0 1 2 3 4 5 6 7 8
0 1 1 0 0
block bitmap
 
clean noclean
 
文件系统 :
在存储设备上组织文件的方法
把二进制代码转化为人类能看懂的方式
类型:
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
mkfs.xfs /dev/sdb1 文件系统类型切换,
mkfs -t xfs -f /dev/sdb2
mkfs.ext4 /dev/sdb2
mkfs -t ext4 /dev/sdb2
mke2fs /dev/sdb2 格式化为ext2
(1) mkfs.FS_TYPE /dev/DEVICE
ext4
xfs
btrfs
vfat
(2) mkfs -t FS_TYPE /dev/DEVICE
-L ‘LABEL‘: 设定卷标
创建ext文件系统
mke2fs : ext系列文件系统专用管理工具
mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
mke2fs -j /dev/sdb2 增加日志区,即格式化为ext3
-t ext2|ext3|ext4 类型
-L "LABEL 设定卷标
e2label /dev/sdb2 仅限ext文件系统
e2label /dev/sdb2 hello
-N #:指定分区中创建多少个inode
-b {1024|2048|4096} 指定block大小
-j: 相当于 -t ext3
-i #: 为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小
-N #:指定分区中创建多少个inode
-I 一个inode记录占用的磁盘空间大小,128---4096
-m #: 默认5%,为管理人员预留空间占总空间的百分比
-O FEATURE[,...]:启用指定特性
-O ^FEATURE:关闭指定特性
 
 
 
文件系统标签:
指向设备的另一种方法
与设备无关
blkid块设备属性信息查看
blkid [OPTION]... [DEVICE]
-U UUID: 根据指定的UUID来查找对应的设备
-L LABEL:根据指定的卷标来查找对应的设备
e2label:管理ext系列文件系统的LABEL
e2label DEVICE [LABEL]
findfs :查找分区
findfs [选项] LABEL=<label>
 
findfs [options] UUID=<uuid>
[root@centos7 ~]# findfs UUID="cf7674ce-563a-46f8-83fe-4596082b33ee"
/dev/mapper/vg_centos-lv_centos2
 
在/etc/fstab 下直接自动挂载 LABEL(卷标)和UUID两种
 
LABEL=mage1 /mnt/mage1 ext4 defaults 0 0
UUID=996b2280-1eaa-4560-b8e3-0c742912afa8 /mnt/mage2 ext4 defaults 0 0
-U UUID: 根据指定的UUID来查找对应的设备
[root@instructor_v7(nanyibo) ~]# blkid -U 996b2280-1eaa-4560-b8e3-0c742912afa8
/dev/sdb2
-L LABEL:根据指定的LABEL来查找对应的设备
[root@instructor_v7(nanyibo) ~]# blkid -L mage1
/dev/sdb1
[root@instructor_v7(nanyibo) ~]# findfs /dev/sdb2
[root@instructor_v7(nanyibo) ~]# findfs UUID=996b2280-1eaa-4560-b8e3-0c742912afa8
/dev/sdb2
[root@instructor_v7(nanyibo) ~]# findfs LABEL=mage1
/dev/sdb1
 
超级快和inode table
 
tune2fs:重新设定ext系列文件系统可调整参数的值
-l:查看指定文件系统超级块信息;super block
-L ‘LABEL‘:修改卷标
-m #:修预留给管理员的空间百分比
-j: 将ext2升级为ext3
-O: 文件系统属性启用或禁用, –O ^has_journal
-o: 调整文件系统的默认挂载选项,–o ^acl ***
-U UUID: 修改UUID号
注意:一定不要在挂载状态下修复
fsck: File System Check
fsck.FS_TYPE
fsck -t FS_TYPE
-p: 自动修复错误
-r: 交互式修复错误
FS_TYPE一定要与分区上已经文件类型相同
?e2fsck:ext系列文件专用的检测修复工具
-y:自动回答为yes
-f:强制修复
文件系统检测和修复
常发生于死机或者非正常关机之后
挂载为文件系统标记为“no clean”
注意:一定不要在挂载状态下修复
fsck: File System Check
fsck.FS_TYPE
fsck -t FS_TYPE
-p: 自动修复错误
-r: 交互式修复错误
FS_TYPE一定要与分区上已经文件类型相同
e2fsck:ext系列文件专用的检测修复工具
-y:自动回答为yes
-f:强制修复
mount 挂载
mount 源目的
filesystem directory
/dev/sda1 /boot
/boot/grub2/grub.cfg
/dev/sda2 /
/etc/sysconfig/network
/dev/sda3 /app
fsck /dev/sdb2 自动判断文件系统类型
 
mount:通过查看/etc/mtab文件显示当前已挂载的所有设备 cat /etc/mtab
mount [-fnrsvw] [-t vfstype] [-o options] device dir
device:指明要挂载的设备;
(1) 设备文件:例如/dev/sda5
(2) 卷标:-L ‘LABEL‘, 例如 -L ‘magedu‘
(4) 伪文件系统名称:proc, sysfs, devtmpfs, configfs
dir:挂载点
事先存在;建议使用空目录
进程正在使用中的设备无法被卸载
查看所有正在运行的进程:ps aux | less
mount常用命令
-t vsftype:指定要挂载的设备上的文件系统类型
-r: readonly,只读挂载
-w: read and write, 读写挂载
-n: 不更新/etc/mtab,mount不可见
cat /proc/mounts 可以看到用-n所隐藏的挂载信息
-a:自动挂载定义在了/etc/fstab文件中尚未挂载的文件系统,且挂载选项中有auto功能)
也可以用mount 后仅跟一个参数,从而去/etc/fstab中找另一个参数。
-L ‘LABEL‘: 以卷标指定挂载设备
-U ‘UUID‘: 以UUID指定要挂载的设备
-B, --bind: 绑定目录到另一个目录上
查看内核追踪到的已挂载的所有设备
cat /proc/mounts
-o
ro 只读
rw 读写 默认
async|sync 异步传输
atime|noatime
diratime/nodiratime
auto|noauto 是否可以使用mount -a 自动挂载
exex|noexec 禁止执行任何权限,无论是否有x权限
mount -o remount,nodev /dev/sdb1
dev|nodev 是否可以在该文件系统上使用dev设备
suid|nosuid 是否suid权限生效
remount 重新挂载,要在后面具体指挂载选项,如不指定,重新挂载为默认权限
nouser|user 是否允许写入/etc/fstab中的挂载项目让普通用户执行以进行 挂载及卸载,如 :mount /dev/sda8
 
acl 是否在挂载时指定acl 安全性
loop 功能吧文件挂到目录上
dd if=/dev/zero of=test.iso bs=1M count=100
mkfs.ext4 test.iso
mount -o loop test.iso /app/data2
losetup -a 可列出loop挂载的设备
ll /8 b 7 8
dev/loop* r如果想增加loop设备,mknod /dev/loop
defaults:相当于rw, suid, dev, exec, auto, nouser, async
修改UUID :tune2fs -U ‘uuidgen‘ /den/sdb1
umount:卸载
查看挂载情况
findmnt MOUNT_POINT|device
查看正在访问指定文件系统的进程
lsof MOUNT_POINT
fuser -v MOUNT_POINT
终止所有在正访问指定的文件系统的进程
fuser -km MOUNT_POINT
卸载
umount DEVICE
umount MOUNT_POIN
 
挂载点和、etc/fstab
 
配置文件系统体系
被mount、fsck和其它程序使用
系统重启时保留文件系统体系
可以在设备栏使用文件系统卷标
使用mount -a 命令挂载/etc/fstab中的所有文件系统
lsblk :查看的是内存中的分区表
fdisk -l /dev/sdb :硬盘中的分区表
partx -d --nr 1-2 /dev/sdb 删除分区表中sdb的分区
 
文件挂载配置文件
/etc/fstab每行定义一个要挂载的文件系统
挂载点通常在/media 或/mnt下
(1) 设备文件:例如/dev/sda5
(2) 卷标:-L ‘LABEL‘, 例如 -L ‘magedu‘
(3) UUID, -U ‘UUID‘:例如 -U ‘0c50523c-43f1-45e7-85c0-a126711d406e‘
处理交换文件和分区
挂载交换分区
使用光盘:
在图形环境下自动启动挂载/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
常用工具:
文件系统空间占用等信息的查看工具:
df [OPTION]... [FILE]...
-H 以1000为单位
-T 文件系统类型
-h: human-readable
-i:inodes instead of blocks
-P: 以Posix兼容的格式输出
查看某目录总体空间占用状态:
du [OPTION]... DIR
-h: human-readable
-s: summary --max-depth 合计
 
对于有进程访问目录而无法卸载的情况
方法一:
[root@localhost_v6(nanyibo) ~]# lsof /app/data1/
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sleep 4137 root cwd DIR 8,8 2802688 2 /app/data1
[root@localhost_v6(nanyibo) ~]# kill 4137
 
 
方法二:
fuser -vm /app/data1
fuser -km /app/data1
 
练习:通过/etc/fstab ,指定挂载点,可以查出对应的分区名
 
方法一: dir=/;findfs `cat /etc/fstab |grep -w $dir |cut -d" " -f1`
方法二: dir=/;findfs $(cat /etc/fstab |grep "[[:space:]]$dir[[:space:]]" | cut -d" " -f1)
方法三: dir=/app;findfs $(cat /etc/fstab |grep "$dir[[:blank:]]"|sed -r "s@(.*)[[:blank:]]+$dir.*@\1@")
 
 
扩展swap
 
基于分区的Swap
fdisk /dev/sda
mkswap /dev/sda9
swapon /dev/sda9
开机自动激活,写入/etc/fstab
UUID=8a5c6dbe-1025-462b-ad32-53ded1918d63 swap swap defaults 0 0
 
基于文件的swap
dd if=/dev/zero of=swap.img bs=1M count=1024
mkswap swap.img
swapon /app/swap.img
/app/swap.img swap swap defaults 0 0
 
swap的优先级
swapon -p xx /dev/sdaX
也可以写入/etc/fstab使永久生效
UUID=5a1ff0b5-5c19-42e3-8b6a-65e7d332ee0c swap swap defaults,pri=20 0 0
UUID=8a5c6dbe-1025-462b-ad32-53ded1918d63 swap swap defaults,pri=15 0 0
/app/swap.img swap swap defaults,pri=10 0 0
 
mkswap /dev/sdb1 swapon -a 生效
 
创建iso文件
mkisofs -r -o etc.iso /etc/
dd if=/dev/zero of=test.iso bs=1M count=512
 
方法一:重新编译内核,使ntfs模块被编译
read only
方法二:ntfs-3g epel
 
 
 
dd命令转换和复制文件
 
1 dd if=/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
lcase 把大写字符转换为小写字符
ucase 把小写字符转换为大写字符
nocreat 不创建输出文件
noerror 出错时不停止
notrunc 不截短输出文件
sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字
符补齐
 
否则,则显示最后一个磁盘上的空间使用信息
 
备份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=notrunc
 
dd备份:
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
将压缩的备份文件恢复到指定盘
1 拷贝内存资料到硬盘
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指令输出中命令的执行时间,即可确定系统最佳的block size大小
修复硬盘
dd if=/dev/sda of=/dev/sda
测试硬盘写速度
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
测试硬盘读速度
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
vim /etc/fstab
defaults,usrquota,grpquota
 
quotacheck(配额检查) -cugm /app 创建用户、组的quota数据文件,位于挂载点的根目录
quotaon /app 激活quota。
edquota guanyu 交互式,调用vim编辑
edquota -p guanyu zhangfei 将guanyu的quota设置复制给zhangfei
setquota guanyu 10M 20M 0 0 /app/ 非交互式
实验:对系统中所有大于等于1000的用户设置基于文件大小的quota,软限制10m,硬限制20m
方法一:
cat /etc/passwd |egrep "x\:[0-9]{4,}\>" |cut -d: -f1 |xargs -i setquota {} 10M 20M 0 0 /app/
方法二:
for n in $(cat /etc/passwd |egrep "x\:[0-9]{4,}\>" |cut -d: -f1);do setquota $n 10M 20M 0 0 /app/ ;done
 
*** Report for user quotas on device /dev/sda5
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 4 0 0 1 0 0
nfsnobody -- 0 10240 20480 0 0 0
nanyibo -- 0 10240 20480 0 0 0
liubei -- 0 10240 20480 0 0 0
testuser -- 0 10240 20480 0 0 0
guanyu -- 0 10240 20480 0 0 0
zhangfei -- 0 10240 20480 0 0 0
 
warnquota 在centos7当中,要安装quota-warnquota
warnquota -u [默认],把邮件发送给普通用户
 
 
 
read
RAID-0:条带卷 读、写性能提升,无容错能力 ,最少磁盘数:2, 2+
RAID-1: 镜像卷,有冗(yun)余能力,最少磁盘数:2, 2N,安全性能高
创建raid1
mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sd{e,f} -x 1 /dev/sdg
RAID-5:读、写性能提升 ,有容错能力:允许最多1块磁盘损坏 最少磁盘数:3, 3+ ,生产中用的最 多,多块数据盘异或运算值存于专用校验盘
创建raid5
mdadm -C /dev/md2 -a yes -l 5 -n 3 /dev/sd{h,i,j}
RAID-6:读、写性能提升 可用空间:(N-2)*min(S1,S2,...) 有容错能力:允许最多2块磁盘损坏 最少磁盘数:4, 4+
RAID-10:读、写性能提升 可用空间:N*min(S1,S2,...)/2 有容错能力:每组镜像最多只能坏一块 最少磁盘数:4, 4+
......
 
软RAID
软件RAID的实现
软RAID配置示例
软RAID测试和修复
软RAID管理
 
 
软件raid的实现
mdadm
-C: 创建模式
-n #: 使用#个块设备来创建此RAID
-l #:指明要创建的RAID的级别
-a {yes|no}:自动创建目标RAID设备的设备文件
-c CHUNK_SIZE: 指明块大小
-x #: 指明空闲盘的个数
-D:显示raid的详细信息;
mdadm -D /dev/md#
管理模式:
-f: 标记指定磁盘为损坏
-a: 添加磁盘
-r: 移除磁盘
观察md的状态:
cat /proc/mdstat
创建read步骤:
1.在VMware当中为该主机增加虚拟硬盘
2.echo ‘- - -‘ > /sys/class/scsi_host/host0/scan 使新增的硬盘立刻生效
3.创建raid0
mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sd{c,d}
4.分区fdisk /dev/md0 非必需
5.格式化mkfs.ext4 /dev/md0
5.挂载
查看raid状态
方法1: cat /proc/mdstat
 
方法2: mdadm -D /dev/md0
 
使用四块盘,做一个raid 10。
mdadm -C /dev/md1 -a yes -l 10 -n 4 /dev/sd{e..h}
 
 
mdadm -C /dev/md0 -a yes -l1 -n2 /dev/sd{b,c}
mdadm -C /dev/md1 -a yes -l1 -n2 /dev/sd{d,e}
mdadm -C /dev/md2 -a yes -l0 -n2 /dev/md{0,1}
 
 
 
删除raid
1.卸载
移除磁盘 mdadm /dev/md0 –r /dev/sda1
2.停掉raid
mdadm -S /dev/mdX
3.清空该raid每个成员盘的superblock
mdadm --zero-superblock /dev/sdX /dev/sdY ……
 
给raid新增成员
mdadm –G /dev/md0 –n 3 -a /dev/sdf1
模拟损坏 仅限raid1和raid5
mdadm /dev/md0 -f /dev/sdc
模拟移除
mdadm /dev/md0 -r /dev/sdc
模拟增加
mdadm /dev/md0 -a /dev/sdc
保存raid状态
mdadm -D -s /dev/md0 > /etc/mdadm.conf
 
共享热备盘
1.分别创建raid1和raid5。
2.mdadm -D -s > /etc/mdadm.conf
3.编辑mdadm.conf
ARRAY /dev/md1 metadata=1.2 name=instructor.magedu.com:1 UUID=eb6fbe24:2449dde5:da515f42:48694ac4 spar
e-group=magedisk
ARRAY /dev/md5 metadata=1.2 spares=1 name=instructor.magedu.com:5 UUID=19dea50d:2cecbdbf:5891cb66:463e
6c2c spare-group=magedisk
MAILADDR root
 
4.启动服务
centos6:service mdmonitor restart
centos7:systemctl restart mdmonitor
 
LVM***逻辑卷
1允许在多个物理设备间重新组织文件系统
2 将设备指定为物理卷
3 用一个或者多个物理卷来创建一个卷组
4 物理卷是用固定大小的物理区域(Physical Extent,PE)来定义的
5在物理卷上创建的逻辑卷 是由物理区域(PE)组成
6可以在逻辑卷上创建文件系统
创建LVM
新增虚拟磁盘
.echo ‘- - -‘ > /sys/class/scsi_host/host0/scan 使新增的硬盘立刻生效
pvcreate /dev/md1 /dev/md5 将设备指定为物理磁盘
vgcreate vgmage(vgmage是卷组名) /dev/md1 /dev/md5 将两个物理磁盘来创建一个卷组
lvcreate -L 38M -n lvlinux31(逻辑卷名) vgmage -n是名字 -L是大小
lvcreate -l 20 -n lvpython8 vgmage
新加举例:lvcreate -l 60%VG -n mylv testvg
lvcreate -l 100%FREE -n yourlv testvg
mkfs.ext4 /dev/vgmage/lvlinux31 选择文件系统类型,也就是格式化
mkfs.xfs /dev/mapper/vgmage-lvpython8
mount /dev/vgmage/lvlinux31 /app/lvmdata2 挂载
mount /dev/vgmage/lvpython8 /app/lvmdata2
 
 
postfix:后缀
/dev/sda5 1TB XFS /var/spool/mail
/dev/sdb1 10TB /app
LVM
 
 
/dev/sda7 /dev/sdb /dev/md0
pvcreate
/dev/sda7 1G /dev/sdb 2G /dev/md0 10G
vgcreate
/dev/vgmage 13G PE 8M
/dev/vgmage/lvmage31 15M
 
pvs vgs lvs 进行查看,显示。。。
 
F: 格式化
40G 40G
80G 40G
 
删除的话倒着执行:
1先卸载
2 lvremove /dev/卷组名/逻辑卷名
3 vgextend +卷组名
4 pvcreate /dev/磁盘名
 
 
逻辑卷的在线扩展
情况1:卷组大小足够扩展
方法一:
lvextend -L +1G /dev/vgmage/lvlinux31
resize2fs /dev/vgmage/lvlinux31
方法二:
lvextend -L 1.5G /dev/vgmage/lvlinux31 -r
 
情况2:卷组大小不够扩展
pvcreate /dev/sdj
vgextend vgmage /dev/sdj
lvextend -L +3G -r /dev/vgmage/lvlinux31
 
XFS
lvextend -r -L 1G /dev/vgmage/lvpython8 一键同步:直接省去加文件系统类型的步骤
xfs_growfs /dev/vgmage/lvpython8
 
逻辑卷减小
1.卸载
2.扫描
3.减小文件系统大小
4.减小逻辑卷大小
 
umount /app/data0/
e2fsck -f /dev/vgmage/lvlinux31
resize2fs /dev/vgmage/lvlinux31 50M
lvreduce -L 50M /dev/vgmage/lvlinux31
 
如果顺序反了,先执行了减逻辑卷,则扩展回去,再重新扫描
lvextend -L 500M /dev/vg_mage/lv_home
e2fsck -f /dev/vg_mage/lv_home
resize2fs /dev/vg_mage/lv_home 200M
lvreduce -L 200M /dev/vg_mage/lv_home
 
 
实验:将逻辑卷迁移到其他主机
1.增加一个独立文件的虚拟磁盘到源主机
2.将该磁盘做为PV,扩展进卷组
3.将所有数据都移动到将要拆卸的物理卷上
pvmove /dev/md5 /dev/sdk
4.将源卷组设置为非激活
vgchange -an vgmage
5.如果卷组中除了要拆卸的硬盘外还有其他的PV,则进行lvreduce,如没有,直接第6步
vgreduce vgmage /dev/md1 /dev/md5 /dev/sdi /dev/sdj
6.将源卷组设置为export状态
vgexport vgmage
 
7.拔硬盘,并加到目标主机
 
8.把vgmage设置为import
vgimport vgmage
9.把卷组设置为激活
lvchange -ay vgmage
10.挂载
 
copy on write = COW
何时写COW
1.当源发生变化时,如A-Version1 变化为A-Version2,则把A-Version1拷至COW
2.对于可写的快照,快照发生改变,直接写入COW
 
icq oicq (qq) wechat msn gtalk
 
e-mail:exchange sendmail postfix
 
mail client: outlook foxmail
 
ms-dos windows linux unix
smb
 
 

磁盘存储和文件系统管理

标签:成员   dfs   分类   忽略   raid 1   vma   访问   data   reduce   

原文地址:https://www.cnblogs.com/wang-jin/p/9308785.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!