大家好,又见面了,我是你们的朋友全栈君。
文件系统管理:
将额外文件系统与根文件系统某现存的目录建立起关系,进而使得此目录作为其他文件访问入口的行为称之为挂载
解除此关联关系的过程称之为卸载
把设备关联至挂载点:mount_point
卸载时:可使用设备,也可以使用挂载点
umount /dev/device
umount mount_point
注意:挂载点下原有文件在挂载/卸载完成后会被临时隐藏
挂载方法:mount device mount_point
mount 通过查看/etc/mtab文件显示当前系统已挂载的所有设备
[root@localhost ~]# mount
/dev/mapper/VolGroup-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext=”system_u:object_r:tmpfs_t:s0″)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
[root@localhost ~]# cat /etc/mtab
/dev/mapper/VolGroup-lv_root / ext4 rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
devpts /dev/pts devpts rw,gid=5,mode=620 0 0
tmpfs /dev/shm tmpfs rw,rootcontext=”system_u:object_r:tmpfs_t:s0″ 0 0
/dev/sda1 /boot ext4 rw 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
mount [-fnrsvw] [-t vfstype] [-o options] device dir
device 指明要挂载的设备
1、设备文件,例如 /dev/sda5
[root@localhost ~]# mount /dev/sdb1 /mydata1
2、卷标 -L ‘LABEL’ 例如 -L 'mydata'
[root@localhost ~]# mount -L 'mydata1' /mydata1
3、UUID -U ‘UUID’ 例如 -U ‘1cd75ebd-c3d8-4a0b-941b-43d520d4d71b’
[root@localhost ~]# mount -U '1cd75ebd-c3d8-4a0b-941b-43d520d4d71b' /mydata1
4、伪文件系统 proc sysfs devtmpfs configfs
dir 挂载点
事先存在,建议使用空目录
进程正在使用中的设备无法被卸载
[root@localhost mydata1]# pwd
/mydata1
[root@localhost mydata1]# umount /mydata1
umount: /mydata1: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
常用选项:
-t vfstype 指定要挂载的设备上的文件系统类型
[root@localhost ~]# mount -t ext4 /dev/sdb1 /mydata1
-r readonly 只读挂载
[root@localhost ~]# mount -r /dev/sdb1 /mydata1
-w read and write 读写挂载
[root@localhost ~]# mount -w /dev/sdb1 /mydata1
-a 自动挂载所有支持自动挂载的设备(定义在/etc/fstab文件中,且挂载选项中有"自动挂载"功能)
[root@localhost ~]# mount -a /dev/sdb1 /mydata1
[root@localhost ~]# cat /etc/mtab | grep "mydata1"
/dev/sdb1 /mydata1 ext4 rw 0 0
[root@localhost ~]# cat /proc/mounts | grep "mydata1"
/dev/sdb1 /mydata1 ext4 rw,seclabel,relatime,barrier=1,data=ordered 0 0
[root@localhost ~]# cat /etc/fstab | grep "mydata1"
-n 不更新/etc/mtab
[root@localhost ~]# mount -n /dev/sdb1 /mydata1
[root@localhost ~]# cat /etc/mtab | grep "mydata1"
-L 'LABEL' 以卷标指定挂载设备
[root@localhost ~]# mount -L 'mydata1' /mydata1
-U ‘UUID’ 以uuid指定要挂载的设备
[root@localhost ~]# mount -U '1cd75ebd-c3d8-4a0b-941b-43d520d4d71b' /mydata1
-B --bind 绑定目录到另一个目录上,在挂载点目录上操作文件,该操作会同步到被被绑定的目录上
[root@localhost ~]# mount /dev/sdb1 /mydata1
[root@localhost ~]# mount -B /mydata11 /mydata1
[root@localhost ~]# mkdir /mydata1/abc
[root@localhost ~]# touch /mydata1/123
[root@localhost ~]# ll /mydata1 /mydata11
/mydata1:
total 4
-rw-r--r--. 1 root root 0 May 21 11:21 123
drwxr-xr-x. 2 root root 4096 May 21 11:20 abc
/mydata11:
total 4
-rw-r--r--. 1 root root 0 May 21 11:21 123
drwxr-xr-x. 2 root root 4096 May 21 11:20 abc
注意:查看内核追踪到的已挂载的所有设备 cat /proc/mounts
[root@localhost ~]# cat /proc/mounts
rootfs / rootfs rw 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,seclabel,relatime 0 0
devtmpfs /dev devtmpfs rw,seclabel,relatime,size=233488k,nr_inodes=58372,mode=755 0 0
devpts /dev/pts devpts rw,seclabel,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /dev/shm tmpfs rw,seclabel,relatime 0 0
/dev/mapper/VolGroup-lv_root / ext4 rw,seclabel,relatime,barrier=1,data=ordered 0 0
none /selinux selinuxfs rw,relatime 0 0
devtmpfs /dev devtmpfs rw,seclabel,relatime,size=233488k,nr_inodes=58372,mode=755 0 0
/proc/bus/usb /proc/bus/usb usbfs rw,relatime 0 0
/dev/sda1 /boot ext4 rw,seclabel,relatime,barrier=1,data=ordered 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw,relatime 0 0
/dev/sdb1 /mydata1 ext4 rw,seclabel,relatime,barrier=1,data=ordered 0 0
/dev/mapper/VolGroup-lv_root /mydata1 ext4 rw,seclabel,relatime,barrier=1,data=ordered 0 0
-o options (挂载文件系统的选项)
async 异步模式
[root@localhost ~]# mount -o async /dev/sdb1 /mydata1
sync 同步模式
[root@localhost ~]# mount -o sync /dev/sdb1 /mydata1
atime/noatime 是否更新访问时间戳,包含目录和文件
[root@localhost ~]# mount -o atime /dev/sdb1 /mydata1
[root@localhost ~]# mount -o noatime /dev/sdb1 /mydata1
diratime/nodiratime 是否更新访问时间戳,目录的访问时间戳
[root@localhost ~]# mount -o diratime /dev/sdb1 /mydata1
[root@localhost ~]# mount -o nodiratime /dev/sdb1 /mydata1
auto/noauto 是否支持自动挂载
[root@localhost ~]# mount -o auto /dev/sdb1 /mydata1
[root@localhost ~]# mount -o noauto /dev/sdb1 /mydata1
exec/noexec 是否支持将文件系统上应用程序运行为进程
[root@localhost ~]# mount -o exec /dev/sdb1 /mydata1
[root@localhost ~]# mount -o noexec /dev/sdb1 /mydata1
dev/nodev 是否支持在此文件系统上使用设备文件
[root@localhost ~]# mount -o dev /dev/sdb1 /mydata1
[root@localhost ~]# mount -o nodev /dev/sdb1 /mydata1
suid/nosuid 是否支持在此文件系统上设置suid权限
[root@localhost ~]# mount -o suid /dev/sdb1 /mydata1
[root@localhost ~]# mount -o nosuid /dev/sdb1 /mydata1
remount 重新挂载
[root@localhost ~]# mount /dev/sdb1 /mydata1
[root@localhost ~]# mount -o remount /dev/sdb1 /mydata1
ro 只读挂载
[root@localhost ~]# mount -o ro /dev/sdb1 /mydata1
rw 读写挂载
[root@localhost ~]# mount -o rw /dev/sdb1 /mydata1
user/nouser 是否允许普通用户挂载此设备
[root@localhost ~]# mount -o user /dev/sdb1 /mydata1
[root@localhost ~]# mount -o nouser /dev/sdb1 /mydata1
acl 启用此文件系统的acl功能,访问控制列表
[root@localhost ~]# mount -o acl /dev/sdb1 /mydata1
注意 上述选项可多个同时使用,彼此使用逗号分隔
默认挂载选项 defaults(包含 rw suid dev exec auto nouser sync)
[root@localhost ~]# mount -o defaults /dev/sdb1 /mydata1
[root@localhost ~]# mount -o rw,suid,dev,exec,auto,nouser,sync /dev/sdb1 /mydata1
卸载命令
umount device
umount mount_point
[root@localhost ~]# umount /dev/sdb1
[root@localhost ~]# umount /mydata1
查看正在访问指定文件系统的进程
fuser -v mount_point
[root@localhost mydata1]# fuser -v /mydata1
USER PID ACCESS COMMAND
/mydata1: root 1132 ..c.. bash
终止所有正在访问指定的文件系统的进程
fuser -km mount_point
挂载交换分区
启用 swapon
swapon [option]… [device]
-a 激活所有的交换分区
-p priority 指定优先级
[root@localhost ~]# swapon -a
[root@localhost ~]# swapon -p 1 /dev/sdb1
禁用 swapoff [option]... [device]
[root@localhost ~]# swapoff /dev/sdb1
内存空间使用状态
free [option]
-m 以mb为单位
-g 以gb为单位 不满1G 则显示为0
[root@localhost ~]# free -m
total used free shared buffers cached
Mem: 474 139 335 0 9 38
-/+ buffers/cache: 90 383
Swap: 959 0 959
[root@localhost ~]# free -g
total used free shared buffers cached
Mem: 0 0 0 0 0 0
-/+ buffers/cache: 0 0
Swap: 0 0 0
文件系统空间占用等信息的查看工具
df [option]... [device]
-h human-readable 以人类易读的格式输出
-i inode instead of blocks 输出inode的使用情况
-P 以posix兼容的格式输出
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 19G 765M 17G 5% /
tmpfs 238M 0 238M 0% /dev/shm
/dev/sda1 485M 33M 427M 8% /boot
[root@localhost ~]# df -h /dev/sda1
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 485M 33M 427M 8% /boot
[root@localhost ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/VolGroup-lv_root 1218224 18620 1199604 2% /
tmpfs 60785 1 60784 1% /dev/shm
/dev/sda1 128016 38 127978 1% /boot
[root@localhost ~]# df -P
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/mapper/VolGroup-lv_root 19166504 783284 17409604 5% /
tmpfs 243140 0 243140 0% /dev/shm
/dev/sda1 495844 33451 436793 8% /boot
查看某目录总体空间占用状态
du
du [option]… dir
-h human-readable 以人类易读的格式输出
-s summary 输出总体情况
[root@localhost ~]# du -h /boot
13K /boot/lost+found
276K /boot/grub
251K /boot/efi/EFI/redhat
253K /boot/efi/EFI
255K /boot/efi
23M /boot
[root@localhost ~]# du -sh /boot
23M /boot
文件挂载的配置文件 /etc/fstab
每一行定义一个要挂载的文件系统
/etc/fstab 定义每个字段的意义
要挂载的设备或伪文件系统 挂载点 文件系统类型 挂载选项 转储频率 自检次序
要挂载的设备或伪文件系统
设备文件 label(label=”) uuid(uuid=”) 伪文件系统(proc sysfs)
挂载点
事先存在的目录,最好为空目录
文件系统
ext2、ext3、ext4、btrfs、xfs
挂载选项
defaults(nouser sync suid rw dev exec auto)
转储频率(备份频率)
0 不做备份
1 每天转储
2 每隔一天转储
自检次序
0 不自检
1 首先自检 一般只有rootfs才用1
…
文件系统上的其他概念
inode: index node 索引节点
地址指针(直接指针 间接指针 三级指针)
inode bitmap (索引节点位图) 对位标识每个inode空闲与否的状态信息
链接文件
硬链接
不能够对目录进行
不能够跨分区进行
指向同一个inode的多个不同路径,创建文件的硬链接即为inode创建新的引用路径,因此会增加其引用计数
符号链接(软链接)
可以对目录进行
可以跨分区进行
指向的是另一个文件的路径,其大小为指向的路径字符串的长度,不增加或减少目标文件inode的引用计数
ln [-sv] src dest 创建硬链接,默认不用带选项
-s symboic link
-v verbose
[root@localhost ~]# ln -v fstab fstab.hl
`fstab.hl' => `fstab'
[root@localhost ~]# ll fstab*
-rw-r--r--. 2 root root 779 May 21 15:48 fstab
-rw-r--r--. 2 root root 779 May 21 15:48 fstab.hl
[root@localhost ~]# ln -sv fstab fstab.sl
`fstab.sl' -> `fstab'
[root@localhost ~]# ll fstab*
-rw-r--r--. 2 root root 779 May 21 15:48 fstab
lrwxrwxrwx. 1 root root 5 May 21 15:49 fstab.sl -> fstab
练习:
1、创建一个20G的文件系统,块大小为2048,文件系统为ext4,卷标为test,要求此分区开机后自动挂载至/testing 目录,且默认有acl挂载选项
mkfs -b 2048 -t ext4 -L 'test' /dev/sdb1
mount -o acl /dev/sdb1 /testing
[root@localhost ~]# grep "testing" /etc/fstab
/dev/sdb1 /testing ext4 acl 0 0
2、创建一个5G的文件系统,卷标为huge,要求此分区开机自动挂载至/mogdata目录,文件系统类型为ext3
mkfs -L 'huge' -t ext3 /dev/sdb1
mount /dev/sdb1 /mogdata
[root@localhost ~]# grep "mogdata" /etc/fstab
/dev/sdb1 /mogdata ext3 defaults 0 0
3、写一个脚本,完成如下功能
列出当前系统识别到的所有磁盘设备
如果磁盘数量为1,则显示其空间使用信息,否则,则显示最后一个磁盘上的空间使用信息
[root@localhost ~]# cat /tmp/disk.sh
#!/bin/bash
fdisk -l
disknum=fdisk -l | grep "^Disk /dev" | wc -l
if [ $disknum -eq 1 ];then
diskfile1=fdisk -l | grep "^Disk /dev" | cut -d' ' -f2 | grep -o "^/dev\(/[[:alpha:]]\).*\>"
df -h $diskfile1
else
fdisk -l | grep “^Disk /dev” | cut -d’ ‘ -f2 | grep -o “^/dev(/[[:alpha:]]).*\>” > /tmp/disk.txt
diskfile2=tail -1 /tmp/disk.txt
df -h $diskfile2
fi
bash脚本编程之用户交互
read [option]… [name…] 用作传递变量
-p ‘prompt’ 提示信息
-t timeout 超时时间
[root@localhost ~]# read name
tom
[root@localhost ~]# echo $name
tom
[root@localhost ~]# read a b c
1 2 3
[root@localhost ~]# echo $a $b $c
1 2 3
[root@localhost ~]# read a b c
how are you?
[root@localhost ~]# echo $a
how
[root@localhost ~]# echo $b
are
[root@localhost ~]# echo $c
you?
没有给出足够的字段,则靠后的变量为空
[root@localhost ~]# read a b c
how are
[root@localhost ~]# echo $a
how
[root@localhost ~]# echo $b
are
[root@localhost ~]# echo $c
如果字段数大于变量数,则多余的字段赋值给最后一个变量
[root@localhost ~]# read a b c
how old are you?
[root@localhost ~]# echo $a
how
[root@localhost ~]# echo $b
old
[root@localhost ~]# echo $c
are you?
-p 选项为输出提示信息
[root@localhost ~]# read -p "enter a username:" username
enter a username:tom
[root@localhost ~]# echo $username
tom
-t 选项为提示超时时间,在超时时间内没有输出,变量则为空
[root@localhost ~]# read -t 5 -p "enter a username:" username
enter a username:[root@localhost ~]#
[root@localhost ~]# echo $username
[root@localhost ~]# read -t 5 -p "enter a username:" username
enter a username:allen
[root@localhost ~]# echo $username
allen
bash -n /path/to/some_script
检测脚本中的语法错误
bash -x /path/to/some_script
调试执行 逐步执行
脚本示例
#!/bin/bash
#version
#author
#description
read -p “enter a disk special file:” diskfile
[ -z $diskfile ] && echo “fool” && exit 1
if fdisk -l | grep “^Disk $diskfile” &> /dev/null;then
fdisk -l $diskfile
else
echo “wrong disk special file.”
exit 2
fi
raid
redundant arrays of indxpensive disks 廉价冗余磁盘阵列
redundant arrays of independent disks 独立冗余磁盘阵列
作用:提高IO能力(磁盘并行读写)、提高耐用性(磁盘冗余)
级别:多块磁盘组织在一起的工作方式有所不同
raid实现的方式
外接式磁盘阵列,通过扩展卡提供适配能力
内接式raid 主板集成raid控制器
software raid 软件方式实现
raid级别表示磁盘的不同组合方式,用数字表示,如下
raid 0 (条带卷 strip)
raid 1 (镜像卷 mirror)
raid 2
…
raid 5
raid 6
raid 10
raid 01
以下是各raid级别的特性
raid 0
连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据传输率,但它没有数据冗余,因此并不能算是真正的raid结构。raid 0知识单纯第提高性能,并没有为数据的可靠性提供保证,而且其中的一次盘失效将影响到所有数据。因此,raid 0不能应用于数据安全性要求高的场合。
读写性能提升
可用空间 n*min(s1,s2…) 取决于容量最小的磁盘,还有磁盘数量
无容错能力
最少磁盘数 2,2+ (2块及2块以上)
raid 1
它是通过磁盘数据镜像实现数据冗余,在成对的对立磁盘上产生互为备份的数据。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此raid 1可以提高读取性能。raid 1是磁盘阵列中单位成本最高的,但提供了很高的数据安全性和可用性。当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据。
读性能提升,写性能略有下降
可用空间1*min(s1,s2…) 取决于容量最小的磁盘
有冗余能力
最少磁盘数 2,2+ (2块及2块以上)
raid 4
raid 4同样也将数据条带化并分布于不同的磁盘上,但条带单位为块或记录。raid 4使用一块磁盘作为奇偶校验盘,每次写操作都需要访问奇偶盘,这时奇偶校验盘会成为写操作的瓶颈,因此raid 4在商业环境中也很少使用。
两块数据盘 一块校验盘(基于或运算)
至少磁盘数 3,3+(3块及3块以上)
raid 5
raid 5不单独指定的奇偶盘,而是在所有磁盘上交叉地存取数据及奇偶校验信息。在raid 5上,读/写指针可同时对阵列设备进行操作,提供了更高的数据流量。raid 5 更适合于小数据和随机读写的数据。
读写性能提升
可用空间 (n-1)*min(s1,s2,…) 取决于容量最小的磁盘,还有磁盘的数量
有容错能力,在组合3块硬盘的情况下,仅可坏1块磁盘
最少磁盘数 3,3+ (3块及3块以上)
raid 6
与raid 5相比,raid 6增加了第二个独立的奇偶校验信息块。两个独立的奇偶系统使用不同的算法,数据的的可靠性非常高,即使两块磁盘同时失效也不会影响数据的使用。但raid 6需要分配给奇偶校验信息更大的磁盘空间。
读写性能提升
可用空间(n-2)*min(s1,s2,…) 取决于容量最小的磁盘,还有磁盘的数量
有容错能力,在组合4块硬盘的情况下,仅可坏2块磁盘
最小磁盘数 4,4+ (4块及4块以上)
混合类型
raid 10
raid 10其实结构非常简单,首先创建2个独立的raid 1,然后将这两个独立的raid 1组成一个raid 0,当往这个逻辑raid 0中写数据时,数据被有序的写入两个raid 1中。磁盘1和磁盘2组成一个raid 1,磁盘3和磁盘4又组成另外一个raid 1,这两个raid 1 组成了一个新的raid 0。如写在硬盘1上的数据1,3,5,7,写在硬盘2中则为数据1,3,5,7,硬盘3中的数据为0,2,4,6,硬盘4中的数据则为0,2,4,6,因此数据在这四个硬盘上组合成raid 10,且具有raid 0和raid 1 两者的特性。
raid 10以raid 0为执行阵列,以raid 1为数据保护阵列,它具有与raid 1一样的容错能力,用于容错处理的系统开销与单独的镜像操作基本一样,由于使用raid 0作为执行等级,因此具有较高的I/O宽带,对于那些想在raid 1基础上大幅提高性能的用户,它是一个完美的解决方案。raid 10适用于数据库存储服务器等需要高性能,高容错但对容量要求不大的场合。
读写性能提升
可用空间 n*min(s1,s2,…)/2 取决于容量最小的磁盘,还有磁盘数量
有容错能力,每组镜像最多只能坏1块
最少磁盘数 4,4+ (4块及4块以上 必须是偶数块)
raid 01、raid 50 raid 7
JBOD just a bunch of disks
功能:将多块磁盘的空间合并一个大的连续空间使用
常用级别:raid 0 raid 1 raid 5 raid 10 raid 50 jbod
实现方式:
硬件实现方式
软件实现方式
centos 6的软件raid的实现
结合内核中的md(multi devices) 多磁盘 多设备
mdadm 模式化的工具
命令的语法格式 mdadm [mode] <raiddevice> [options] <component-devices>
支持的raid级别 LINEAR raid 0 raid 1 raid 4 raid 5 raid 6 raid 10
模式:
创建 -C
装配 -A
监控 -F
管理 -f -r -a
<raiddevice> /dev/md#
<component-devices> 任意块设备 任意磁盘分区
-C 创建模式
-n # 使用#个块设备来创建此raid
-l # 指明要创建的raid 级别
-a {yes|no} 自动创建目标raid设备的设备文件
-c chunk_size 指明块大小
-x # 指明空闲盘的个数
[root@localhost ~]# mdadm -C /dev/md0 -n 3 -l 5 -a yes -c 512 -x 1 /dev/sdb{1,2,3,5}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
例如 创建一个10G可用的raid 5
-D 显示raid的详细信息
mdadm -D /dev/md#
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Mon May 28 15:54:18 2018
Raid Level : raid5
Array Size : 10401792 (9.92 GiB 10.65 GB)
Used Dev Size : 5200896 (4.96 GiB 5.33 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Mon May 28 15:55:13 2018
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : f5ecea12:b78a3317:92082083:095814f7
Events : 18
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 18 1 active sync /dev/sdb2
4 8 19 2 active sync /dev/sdb3
3 8 21 - spare /dev/sdb5
管理模式:
-f 标记指定磁盘为损坏
[root@localhost ~]# mdadm /dev/md0 -f /dev/sdb5
mdadm: set /dev/sdb5 faulty in /dev/md0
-r 移除磁盘
[root@localhost ~]# mdadm /dev/md0 -r /dev/sdb5
mdadm: hot removed /dev/sdb5 from /dev/md0
-a 添加磁盘
[root@localhost ~]# mdadm /dev/md0 -a /dev/sdb5
mdadm: added /dev/sdb5
观察md的状态
cat /proc/mdstat
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb53 sdb3[4] sdb2[1] sdb1[0]
10401792 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
watch命令:
-n# 刷新间隔 单位是秒
watch -n# ‘command’
[root@localhost ~]# watch -n1 ‘cat /proc/mdstat’
练习1:创建一个可用空间为10G的raid 0设备,要求其chunk大小为128k,文件系统为ext4,有一个空闲盘,开机可自动挂载至/backup目录
[root@localhost ~]# mdadm -C /dev/md0 -n 2 -l 0 -a yes -c 128 /dev/sdb{1,2}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@localhost ~]# mkfs -t ext4 /dev/md0
[root@localhost ~]# mount /dev/md0 /backup
[root@localhost ~]# grep “backup” /etc/fstab
UUID=0a7d0347-1b81-4bac-af2b-47a4b9748037 /backup ext4 defaults 0 0
练习2:创建一个可用空间为10G的raid 10设备,要求其chunk大小为256k,文件系统为ext4,开机可自动挂载至/mydata目录
[root@localhost ~]# mdadm -C /dev/md0 -n 4 -l 10 -a yes -c 256 /dev/sdb{1,2,3,5}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@localhost ~]# mkfs -t ext4 /dev/md0
[root@localhost ~]# mount /dev/md0 /mydata
[root@localhost ~]# grep “mydata” /etc/fstab
UUID=17c2420f-9ea7-453c-bc7d-b0b87b363b18 /mydata ext4 defaults 0 0
lvm2
lvm logical volume manager version 2 逻辑卷管理器
内核模块 dm device mapper 将一个或多个底层块设备组织成一个逻辑设备的模块(/dev/dm-#)
/dev/mapper/vg_name-lv_name
/dev/mapper/myvg-mylv <– /dev/vg_name/lv_name(/dev/myvg/mylv) 后者为链接文件
pv管理工具
pvs 简要pv信息显示
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 VolGroup lvm2 a–u 19.51g 0
pvdisplay 显示pv的详细信息
[root@localhost ~]# pvdisplay
— Physical volume —
PV Name /dev/sda2
VG Name VolGroup
PV Size 19.51 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 4994
Free PE 0
Allocated PE 4994
PV UUID QcPKeC-S2FO-QMMn-ZaVT-aqAE-5BaG-zZH9IK
pvcreate /dev/device 创建pv
[root@localhost ~]# pvcreate /dev/sdb1
Physical volume “/dev/sdb1” successfully created
vg管理工具
vgs 简要vg信息显示
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
VolGroup 1 2 0 wz–n- 19.51g 0
vgdisplay 显示vg的详细信息
[root@localhost ~]# vgdisplay
— Volume group —
VG Name VolGroup
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 19.51 GiB
PE Size 4.00 MiB
Total PE 4994
Alloc PE / Size 4994 / 19.51 GiB
Free PE / Size 0 / 0
VG UUID WlXRlE-ytaQ-x8U0-zQcC-KnEz-VS6m-dfGE0s
vgcreate [-s #[kKmMgGtTpPeE]] 指定pe大小 volumegroupname physicaldevicepath [physicaldevicepath…] 创建vg
[root@localhost ~]# vgcreate myvg /dev/sdb1
Volume group “myvg” successfully created
[root@localhost ~]# vgcreate -s 8M mylv /dev/sdb1
Volume group “mylv” successfully created
vgextend volumegroupname physicaldevicepath [physicaldevicepath…] 扩展vg
[root@localhost ~]# vgextend myvg /dev/sdb2
Volume group “myvg” successfully extended
vgreduce volumegroupname physicaldevicepath [physicaldevicepath…] 缩减vg
先做pvmove
[root@localhost ~]# pvmove /dev/sdb2
No data to move for myvg
[root@localhost ~]# vgreduce myvg /dev/sdb2
Removed “/dev/sdb2” from volume group “myvg”
vgremove volumegroupname 删除vg
[root@localhost ~]# vgremove myvg
Volume group “myvg” successfully removed
lv管理工具
lvs 简要lv信息显示
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_root VolGroup -wi-ao—- 18.57g
lv_swap VolGroup -wi-ao—- 960.00m
lvdisplay 显示lv的详细信息
[root@localhost ~]# lvdisplay
— Logical volume —
LV Path /dev/VolGroup/lv_root
LV Name lv_root
VG Name VolGroup
LV UUID 0lIuzI-Yc6X-UCB1-Nv9B-LWv1-FrUE-uguRMA
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2018-05-26 23:27:17 +0800
LV Status available
#open 1
LV Size 18.57 GiB
Current LE 4754
Segments 1
Allocation inherit
Read ahead sectors auto
-
currently set to 256
Block device 253:0— Logical volume —
LV Path /dev/VolGroup/lv_swap
LV Name lv_swap
VG Name VolGroup
LV UUID 5U3Eu5-OVRJ-b37u-pllp-SXYm-eaTP-vmosNB
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2018-05-26 23:27:18 +0800
LV Status available
#open 1
LV Size 960.00 MiB
Current LE 240
Segments 1
Allocation inherit
Read ahead sectors auto - currently set to 256
Block device 253:1
lvcreate -L #[mMgGtT] -n name volumegroup 创建lv
[root@localhost ~]# lvcreate -L 5G -n mylv myvg
Logical volume “mylv” created.
lvremove /dev/vg_name/lv_name 删除lv
[root@localhost ~]# lvremove /dev/myvg/mylv
Do you really want to remove active logical volume mylv? [y/n]: y
Logical volume “mylv” successfully removed
扩展逻辑卷
lvextend -L [+]#[mMgGtT] /dev/vg_name/lv_name
resize2fs /dev/vg_name/lv_name
[root@localhost ~]# lvextend -L 10G /dev/myvg/mylv
Size of logical volume myvg/mylv changed from 5.00 GiB (1280 extents) to 10.00 GiB (2560 extents).
Logical volume mylv successfully resized.
[root@localhost ~]# resize2fs /dev/myvg/mylv
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/myvg/mylv is mounted on /backup; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/myvg/mylv to 2621440 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 2621440 blocks long.
缩减逻辑卷
umount /dev/vg_name/lv_name
e2fsck -f /dev/vg_name/lv_name
resize2fs /dev/vg_name/lv_name #[mMgGtT]
lvreduce -L [-]#[mMgGtT] /dev/vg_name/lv_name
mount /dev/vg_name/lv_name
[root@localhost ~]# umount /dev/myvg/mylv
[root@localhost ~]# e2fsck -f /dev/myvg//mylv
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/myvg//mylv: 14/655360 files (0.0% non-contiguous), 76786/2621440 blocks
[root@localhost ~]# resize2fs /dev/myvg/mylv 5G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/myvg/mylv to 1310720 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 1310720 blocks long.
[root@localhost ~]# lvreduce -L 5G /dev/myvg/mylv
WARNING: Reducing active logical volume to 5.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce myvg/mylv? [y/n]: y
Size of logical volume myvg/mylv changed from 10.00 GiB (2560 extents) to 5.00 GiB (1280 extents).
Logical volume mylv successfully resized.
[root@localhost ~]# mount /dev/myvg/mylv /backup
快照:snapshot
lvcreate -L #[mMgGtT] -p(权限) r(只读) -s(快照) -n(名字) snapshot_lv_name original_lv_name
[root@localhost mydata]# lvcreate -L 1G -p r -s -n mylv-snap /dev/myvg/mylv
Logical volume “mylv-snap” created.
[root@localhost mydata]# mount /dev/myvg/mylv-snap /mydata
创建快照卷后,无须格式化,直接挂载
练习1:创建一个至少有两个pv组成的大小为20G的名为testvg的vg,要求pe大小为16mb,而后在卷组中创建大小为5g的逻辑卷testlv,挂载至/users目录;
[root@localhost ~]# pvcreate /dev/sdb{1,2}
Physical volume “/dev/sdb1” successfully created
Physical volume “/dev/sdb2” successfully created
[root@localhost ~]# vgcreate -s 16m testvg /dev/sdb{1,2}
Volume group “testvg” successfully created
[root@localhost ~]# lvcreate -L 5g -n testlv testvg
Logical volume “testlv” created.
[root@localhost ~]# mke2fs /dev/testvg/testlv
[root@localhost ~]# mount /dev/testvg/testlv /users
练习2:新建用户archlinux,要求其家目录为/users/archlinux,而后su切换至archlinux用户,复制/etc/pam.d目录至自己的家目录;
[root@localhost ~]# useradd -d /users/archlinux archlinux
[root@localhost ~]# su – archlinux
[archlinux@localhost ~]$ pwd
/users/archlinux
[archlinux@localhost ~]$ cp -r /etc/pam.d /users/archlinux
[archlinux@localhost ~]$ ll /users/archlinux
total 8
drwxr-xr-x. 2 archlinux archlinux 4096 May 29 17:12 pam.d
练习3:扩展testlv至7g,要求archlinux用户的文件不能丢失;
[root@localhost ~]# lvextend -L 7g /dev/testvg/testlv
Size of logical volume testvg/testlv changed from 5.00 GiB (320 extents) to 7.00 GiB (448 extents).
Logical volume testlv successfully resized.
[root@localhost ~]# resize2fs /dev/testvg/testlv
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/testvg/testlv is mounted on /users; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/testvg/testlv to 1835008 (4k) blocks.
The filesystem on /dev/testvg/testlv is now 1835008 blocks long.
[root@localhost ~]# ll /users/archlinux/
total 4
drwxr-xr-x. 2 archlinux archlinux 4096 May 29 17:23 pam.d
练习4:收缩testlv至3g,要求archlinux用户的文件不能丢失;
[root@localhost ~]# umount /dev/testvg/testlv
[root@localhost ~]# e2fsck -f /dev/testvg/testlv
[root@localhost ~]# resize2fs /dev/testvg/testlv 3g
[root@localhost ~]# lvreduce -L 3g /dev/testvg/testlv
[root@localhost ~]# mount /dev/testvg/testlv /users
[root@localhost ~]# ll /users/archlinux
total 4
drwxr-xr-x. 2 archlinux archlinux 4096 May 29 17:23 pam.d
练习5:对testlv创建快照,并尝试基于快照备份数据,验证快照的功能;
[root@localhost ~]# lvcreate -L 1g -p rw -s -n testlv-snap /dev/testvg/testlv
Logical volume “testlv-snap” created.
[root@localhost ~]# mount /dev/testvg/testlv-snap /users-snap
[root@localhost ~]# ll /users-snap/
total 20
drwx——. 3 archlinux archlinux 4096 May 29 17:24 archlinux
drwx——. 2 root root 16384 May 29 17:21 lost+found
文件系统挂载使用
挂载光盘设备
光盘设备文件
ide /dev/hdc
sata /dev/sr0
符号链接文件
/dev/cdrom
/dev/cdrw
/dev/dvd
/dev/dvdrw
mount -r /dev/cdrom /media
umount /dev/cdrom
dd命令 convert and copy a file
用法 dd if=/path/frome/src of=/path/to/dest
bs=# block size 复制单元大小
count=# 复制多少个bs
磁盘拷贝
dd if=/dev/sda of=/dev/sdb
备份MBR
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
删除MBR
dd if=/dev/zero of=/dev/sda bs=512 count=1
两个特殊设备
/dev/null 数据黑洞
/dev/zero 吐零机
转载于:https://blog.51cto.com/3832598/2121906
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/107493.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...