1、创建一个10G分区,并格式为ext4文件系统;
(1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;
答:①首先创建分区,命令如下:(注:仅展示命令,其中一些细节已省略)
[root@csd ~]# fdisk /dev/sdc ##选择要分区的设备
Command (m for help): n ##“n”表示新建一个分区
Command action ##选择分区的类型,主分区或扩展分区
e extended
p primary partition (1-4)
e
Partition number (1-4): 1 ##选择编号,范围1-4
First cylinder (1-2610, default 1): ##起始扇区,可使用默认值
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): 10G ##结束扇区,可使用容量单位K,M,G
Command (m for help): n ##由于扩展区无法直接使用,我们要再新建逻辑扇区
Command action ##选择分区类型
l logical (5 or over)
p primary partition (1-4)
l
First cylinder (1-10, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-10, default 10): ##选择大小,默认则分配全部扩展空间
Using default value 10
Command (m for help): w ##保存退出
The partition table has been altered!
如图所示:
②使用mke2fs将划分的逻辑分区转换成ext4格式,且block大小为2048, 预留空间百分比为2, 卷标为MYDATA,命令如下:
[root@csd ~]# mke2fs -t ext4 -b 2048 -m 2 -L 'MYDATA' /dev/sdc5##-t:设定文件格式 -b:指定block块大小 -m #:为管理人员预留的空间占据的百分比,#为数字,代表百分之多少 -L:设定卷标
如图所示:
③修改其默挂载属性,可使用tune2fs实现,命令如下:
[root@csd ~]# tune2fs -o acl /dev/sdc5 ##-o选项为修改默认挂载项tune2fs 1.41.12 (17-May-2010)
结果如下:
(2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳;
答:挂载使用mount命令来实现,命令如下:
[root@csd ~]# mount -o nodiratime,noexec -L MYDATA /data/mydata##"-o options":挂载文件系统的选项;-o后面选项可有多个,用逗号隔开##diratime/nodiratime:每一次访问是否更新目录文件的访问时间戳##exec/noexec:是否支持将文件系统上的应用程序运行为进程
结果如下:
2、创建一个大小为1G的swap分区,并创建好文件系统,并启用之;
答:首先创建一个1G的的分区,并修改为swap文件系统,如下:
[root@csd ~]# mkswap /dev/sdb5 ##创建swapSetting up swapspace version 1, size = 7964 KiBno label, UUID=b7841e4a-adfc-4b3e-a092-e89b9ac8121e[root@csd ~]# swapon /dev/sdb5 ##启用swap
结果如下:
3、写一个脚本
(1)、获取并列出当前系统上的所有磁盘设备;
(2)、显示每个磁盘设备上每个分区相关的空间使用信息;
答:脚本如下
#!/bin/bashecho "当前系统上的磁盘设备:"fdisk -l | egrep "^Disk[[:space:]]/dev" ##"fdisk -l" 查看当前系统磁盘信息,然后筛选以"Disk /dev"开头的行echo "各分区使用情况:"df -h | grep "^/dev*" ##"df -h"查看当前各分区使用状况,然后筛选以"/dev"开头的行
结果如下:
4、总结RAID的各个级别及其组合方式和性能的不同;
答:
RAID-0:
读写性能提升;可用空间:N*min(s1,s2.....);N硬盘个数;min最小的空间
无容错能力;最少磁盘数:2,2+
RAID-1:
读性能提升、写性能略有下降;可用空间:1*min(S1,S2.....);
有冗余能力,最少磁盘数:2,2+
RAID-5:
读写性能提升;可用空间(N-1)*min(s1,s2....);有容错能力:1块磁盘
最少磁盘数:3,3+1
RAID-6:
读写性能提升;可用空间(N-2)*min(s1,s2....);
有容错能力:2块磁盘;最少磁盘数:4,4+
混合型RAID
RAID-10:
读写性能提升;可用空间:N*min(s1,s2....)/2
有容错能力:每组镜像最多只能坏一块;最少磁盘数:4,4+
5、创建一个大小为10G的RAID1,要求有一个空闲盘,而且CHUNK大小为128k;
答:RAID1要求最少2块硬盘,由于还要一个空闲盘,所以总共使用3块硬盘创建;首先在3块硬盘中创建一个10G空间,以/dev/sda为例:
[root@csd ~]# fdisk /dev/sdaWARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u').Command (m for help): n ##新建一个分区Command action e extended p primary partition (1-4)e ##由于我的硬盘已有三个分区,所以我把剩余的全部分成扩展分区Selected partition 4First cylinder (1428-3916, default 1428): Using default value 1428Last cylinder, +cylinders or +size{K,M,G} (1428-3916, default 3916): Using default value 3916Command (m for help): n ##新建一个10G的分区做RAID使用First cylinder (1428-3916, default 1428): Using default value 1428Last cylinder, +cylinders or +size{K,M,G} (1428-3916, default 3916): +10GCommand (m for help): t ##调整分区IDPartition number (1-5): 5 ##新的10G分区为5,所以选择5Hex code (type L to list codes): fd ##调整分区ID为fdChanged system type of partition 5 to fd (Linux raid autodetect)Command (m for help): p ##查看所有分区情况Disk /dev/sda: 32.2 GB, 32212254720 bytes255 heads, 63 sectors/track, 3916 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x0002784f Device Boot Start End Blocks Id System/dev/sda1 * 1 26 204800 83 LinuxPartition 1 does not end on cylinder boundary./dev/sda2 26 1301 10240000 83 Linux/dev/sda3 1301 1428 1024000 82 Linux swap / Solaris/dev/sda4 1428 3916 19985446 5 Extended/dev/sda5 1428 2733 10482967 fd Linux raid autodetectCommand (m for help): wq ##保存退出The partition table has been altered!Calling ioctl() to re-read partition table.WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.The kernel still uses the old table. The new table will be used atthe next reboot or after you run partprobe(8) or kpartx(8)Syncing disks.
分区创建结果如下:
创建RAID0:
[root@csd ~]# mdadm -C /dev/md0 -a yes -n 2 -l 1 -c 128 -x 1 /dev/sda5 /dev/sdb5 /dev/sdc5##注释:##-C:创建模式##-n #:使用#个块设备来创建此RAID;##-l #:指明要创建的RAID级别;##-a {yes|no}:自动创建目标RAID设备的设备文件;##-c CHUNK_SIZE:指明块大小;##-x #:指明空闲盘的个数;mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90mdadm: /dev/sdc5 appears to contain an ext2fs file system size=80260K mtime=Sun Sep 11 22:12:49 2016Continue creating array? ymdadm: Defaulting to version 1.2 metadatamdadm: array /dev/md0 started.
结果如下:
6、创建一个大小为4G的RAID5设备,chunk大小为256k,格式化ext4文件系统,要求可开机自动挂载至/backup目录,而且不更新访问时间戳,且支持acl功能;
答:创建3个2G分区,raid5的可用空间为(N-1)*min(s1,s2....)
创建raid5:
[root@csd ~]# mdadm -C /dev/md0 -l 5 -a yes --chunk=256 -n 3 /dev/sda5 /dev/sdb5 /dev/sdc5mdadm: /dev/sdc5 appears to contain an ext2fs file system size=80260K mtime=Sun Sep 11 22:12:49 2016Continue creating array? ymdadm: Defaulting to version 1.2 metadatamdadm: array /dev/md0 started.
结果如下:
挂载过程:
[root@csd ~]# mke2fs -t ext4 /dev/md0 ##将md0格式化为ext4
[root@csd ~]# mount /dev/md0 -o auto,noatime,acl /backup ##挂载至/backup
编辑/etc/fstab,开机自动挂载
结果如下:
7、写一个脚本
(1) 接受一个以上文件路径作为参数;
(2) 显示每个文件拥有的行数;
(3) 总结说明本次共为几个文件统计了其行数;
答:脚本代码如下:
#!/bin/bashif [ $# -eq 0 ];then ##“$#”传递给脚本的参数个数,“if”来判断路径不为空echo "至少需要一个文件路径!" exit 1fifor i in $*;do ##“$*”传递给脚本所有参数;(调用时将所有参数当独立字符串)echo "$i 文件行数为:$(cat $i | wc -l) 行" ##统计给出的各个文件路径doneecho "本次统计 $# 个文件"
结果如下:
8、写一个脚本
(1) 传递两个以上字符串当作用户名;
(2) 创建这些用户;且密码同用户名;
(3) 总结说明共创建了几个用户;
答:脚本代码如下:
#!/bin/bashfor n in $*;do ##使用for循环来判断每一个用户名是否低于或等于2个字符串if [ $(echo "$n" | wc -c) -le 3 ];then ##判断条件echo "用户名不得低于2个字符串"exit 1elifid $n >> /dev/null;then ##判断此用户名是否存在echo "用户名$n 已存在"exit 1else ##若用户名不存在且是两个字符串以上,创建用户名useradd $n echo "$n" | passwd --stdin $n >> /dev/null ##修改用户的密码同用户名echo "用户$n 已添加,密码同用户名,请及时修改!"fidoneecho "本次添加$# 个用户" ##统计添加了多少个用户
结果如下:
用户名已存在的情况
用户名低于2个字符串的情况
符合所有条件的情况
9、写一个脚本,新建20个用户,visitor1-visitor20;计算他们的ID之和;
答:脚本代码如下:
#!/bin/bashexport sum=0 ##定义一个变量,后期求ID和用for i in {1..20};do ##循环次数if [ id visitor$i ] &> /dev/null ;then ##测试要添加的用户是否已存在,若存在则中断echo "用户visitor$i 已存在" exit 1elseuseradd visitor$i >> /dev/null ##添加用户echo "用户visitor$i 已添加" let sum+=$(id -u visitor$i) ##计算ID之和fidoneecho "所添加用户的UID之和为:$sum"
结果如下:
10、写一脚本,分别统计/etc/rc.d/rc.sysinit、/etc/rc.d/init.d/functions和/etc/fstab文件中以#号开头的行数之和,以及总的空白行数;
答:脚本代码如下:
#!/bin/bashexport sum1=0 ##求以#开头行数之和用export sp=0 ##求以空格开头行数之和用for i in $#;do ##循环次数let sum1+=$(cat $* | grep -o "^#.*" | wc -l) ##找出文件中以#开头的行数并求和let sp+=$(cat $* | egrep -o "^[[:space:]].*" | wc -l) ##找出文件中以空格开头的行数并求和doneecho "给出的文档中以#开头的行数和为:$sum1" echo "给出的文档中以空格开头的行数和为:$sp"
结果如下:
给出的文件中以#开头的行数:
给出的文件中以空格开头的行数:
11、写一个脚本,显示当前系统上所有默认shell为bash的用户的用户名、UID以及此类所有用户的UID之和;
答:脚本代码如下:
#!/bin/bashexport sum=0 ##用于求UID之和用cat /etc/passwd | egrep "bash$" | cut -d: -f1,3,7 ##显示默认shell为bash的信息for i in $(cat /etc/passwd | egrep "bash$" | cut -d: -f3);do ##循环次数let sum+=$i ##求UID之和doneecho "以上UID之和为:$sum"
结果如下:
12、写一个脚本,显示当前系统上所有,拥有附加组的用户的用户名;并说明共有多少个此类用户;
答:脚本代码如下:
#!/bin/bashexport sum=0 ##用作计算符合条件用户名数量for i in $(cat /etc/passwd | cut -d: -f1);do ##循环次数,循环列表为所有用户名if [ $(groups $i | wc -w) -gt 3 ];then ##对用户名进行group查看,如果有多余的附加组,则统计后的单词数会大于3echo "$(groups $i)" ##显示出拥有附加组的用户名let sum+=1 ##累计计算次数fidoneecho "此类用户共有$sum 个"
结果如下:
13、创建一个由至少两个物理卷组成的大小为20G的卷组;要求,PE大小为8M;而在卷组中创建一个大小为5G的逻辑卷mylv1,格式化为ext4文件系统,开机自动挂载至/users目录,支持acl;
答:创建2个10G分区,修改格式为8e(以/dev/sdb为例)
[root@csd ~]# fdisk /dev/sdbWARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u').Command (m for help): nCommand action l logical (5 or over) p primary partition (1-4)lFirst cylinder (1-2610, default 1): Using default value 1Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +10GCommand (m for help): tPartition number (1-5): 5Hex code (type L to list codes): 8eChanged system type of partition 5 to 8e (Linux LVM)Command (m for help): pDisk /dev/sda: 32.2 GB, 32212254720 bytes255 heads, 63 sectors/track, 3916 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x0002784f Device Boot Start End Blocks Id System/dev/sda1 * 1 26 204800 83 LinuxPartition 1 does not end on cylinder boundary./dev/sda2 26 1301 10240000 83 Linux/dev/sda3 1301 1428 1024000 82 Linux swap / Solaris/dev/sda4 1428 3916 19985446 5 Extended/dev/sda5 1428 2733 10482967 8e Linux LVMCommand (m for help): wqThe partition table has been altered!
创建PV:
创建GV:
[root@csd ~]# vgcreate -s 8m myvg /dev/sda5 /dev/sdb5 ##"-s"选项为定义PE大小 Volume group "myvg" successfully created
创建LV:
[root@csd ~]# lvcreate -L 5G -n mylv1 myvg Logical volume "mylv1" created
格式化mylv1:
挂载至/users,支持acl:
设置开机自动挂载,支持acl:
14、新建用户magedu;其家目录为/users/magedu,而后su切换至此用户,复制多个文件至家目录;
答:
[root@csd /]# useradd -d /users/magedu magedu[magedu@csd etc]$ cp /etc/i* /users/magedu/
15、扩展mylv1至9G,确保扩展完成后原有数据完全可用;
答:
[root@csd /]# lvextend -L +4G /dev/myvg/mylv1 ##扩展物理边界 Extending logical volume mylv1 to 9.00 GiB Logical volume mylv1 successfully resized[root@csd /]# resize2fs /dev/myvg/mylv1 ##扩展逻辑边界resize2fs 1.41.12 (17-May-2010)Filesystem at /dev/myvg/mylv1 is mounted on /users; on-line resizing requiredold desc_blocks = 1, new_desc_blocks = 1Performing an on-line resize of /dev/myvg/mylv1 to 2359296 (4k) blocks.The filesystem on /dev/myvg/mylv1 is now 2359296 blocks long.
结果如下:
扩展后数据情况:
16、缩减mylv1至7G,确保缩减完成后原有数据完全可用;
答:
[root@csd ~]# umount /dev/myvg/mylv1 ##先卸载此卷[root@csd ~]# e2fsck -f /dev/myvg/mylv1 ##进行文件系统强制检测 e2fsck 1.41.12 (17-May-2010)第一步: 检查inode,块,和大小第二步: 检查目录结构第3步: 检查目录连接性Pass 4: Checking reference counts第5步: 检查簇概要信息/dev/myvg/mylv1: 25/589824 files (0.0% non-contiguous), 72685/2359296 blocks[root@csd ~]# resize2fs /dev/myvg/mylv1 resize2fs 1.41.12 (17-May-2010)The filesystem is already 2359296 blocks long. Nothing to do![root@csd ~]# resize2fs /dev/myvg/mylv1 7G ##必须先缩减逻辑边界resize2fs 1.41.12 (17-May-2010)Resizing the filesystem on /dev/myvg/mylv1 to 1835008 (4k) blocks.The filesystem on /dev/myvg/mylv1 is now 1835008 blocks long.[root@csd ~]# lvreduce -L -2G /dev/myvg/mylv1 ##缩减物理边界 WARNING: Reducing active logical volume to 7.00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.)Do you really want to reduce mylv1? [y/n]: y Reducing logical volume mylv1 to 7.00 GiB Logical volume mylv1 successfully resized
结果如下:
17、对mylv1创建快照,并通过备份数据;要求保留原有的属主属组等信息;
答:
[root@csd ~]# lvcreate -L 1G -s -n mylv101 /dev/myvg/mylv1 Logical volume "mylv101" created
结果如下:
本文出自 “时光之书” 博客,谢绝转载!