文件系统挂载、ext文件系统及read命令、Linux RAID、lvm应用「建议收藏」

文件系统挂载、ext文件系统及read命令、Linux RAID、lvm应用

大家好,又见面了,我是你们的朋友全栈君。

文件系统管理:
将额外文件系统与根文件系统某现存的目录建立起关系,进而使得此目录作为其他文件访问入口的行为称之为挂载

解除此关联关系的过程称之为卸载

把设备关联至挂载点: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账号...

(0)


相关推荐

  • html5手机端的点击弹出侧边滑动菜单代码

    效果预览:http://hovertree.com/texiao/html5/19/本效果适用于移动设备,可以使用手机等浏览效果。源码下载:http://hovertree.com/h/bjaf/mw

    2021年12月21日
  • protostuff java_protostuff 及其注意事项

    protostuff java_protostuff 及其注意事项google开发的开源的序列化方案protocolbuffer(简称protobuf),它的好处很多,独立于语言,独立于平台,最最重要的是它的效率相当高,用protobuf序列化后的大小是json的10分之一,xml格式的20分之一,是二进制序列化的10分之一。protostuff是一个基于protobuf实现的序列化方法,它较于protobuf最明显的好处是,在几乎不损耗性能的情况下做到了不用…

  • pycharm怎么配置pygame环境—–pycharm怎么配置环境[通俗易懂]

    pycharm怎么配置pygame环境—–pycharm怎么配置环境[通俗易懂]最近学习python要做一个飞机大战的项目,需要配置importpygame新建项目–importpygame,结果是这样滴没有安装这个模块,当然import不了啦,怎么用pycharm下载安装pygame呢?首先选择setting–projectinerpreter,设置项目编译器。大红圈是已经安装过的模块,点击旁边小圈里的小加号是添加新模块,我们轻轻的点一下…

  • Eclipse如何让关闭的项目进行隐藏

    Eclipse如何让关闭的项目进行隐藏 、步骤一:步骤二:选中Closed projects点击ok即可

  • ssh用法及命令

    ssh用法及命令http://blog.csdn.net/pipisorry/article/details/52269785什么是SSH?简单说,SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者…

  • pycharm导包时出现错误怎么解决_pycharm引入模块报错

    pycharm导包时出现错误怎么解决_pycharm引入模块报错pycharm导包错误没有警告

    2022年10月31日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号