美文网首页
week_4_磁盘管理及shell判断逻辑

week_4_磁盘管理及shell判断逻辑

作者: 人間失格_430b | 来源:发表于2019-02-20 18:07 被阅读0次

    Q:

    1、描述GPT是什么,应该怎么使用。
    2、创建一个10G的分区,并格式化为ext4文件系统。要求:

    (1)block大小为2048,预留空间2%,卷标为MYDATA,
    (2) 挂载至/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳。
    (3)可开机自动挂载。

    3、创建一个大小为1G的swap分区,并启用。
    4、编写脚本计算/etc/passwd文件中第10个用户和第20个用户id号之和。
    5、将当前主机名保存至hostName变量中,主机名如果为空,或者为localhost.localdomain则将设置为magedu.com
    6、编写脚本,通过命令行参数传入一个用户名,判断id号是偶数还是奇数。
    7、lvm基本应用以及扩展缩减实现。

    A:

    1、GPT

    GUID磁盘分区表GUID Partition Table,缩写:GPT)其含义为“全局唯一标识磁盘分区表”,是一个实体硬盘的分区表的结构布局的标准。它是可扩展固件接口标准(用于替代BIOS系统中的一64bits来存储逻辑块地址和大小信息的主开机纪录(MBR)分区表。

    扇区0 1 2 3~33 34~ ... ~-34 -33~-3 -2 -1
    PMBR GPT表头 分区表项1~4 分区表项5~128 分区1 分区... 最后一个分区 备份分区表项5~128 备份分区表项1~4 备份GPT表头
    • LBA0
      • 在GPT分区表的最开头,处于兼容性考虑仍然存储了一份传统的MBR,用来防止不支持GPT的硬盘管理工具错误识别并破坏硬盘中的数据,这个MBR也叫做保护MBR。在支持从GPT启动的操作系统中,这里也用于存储第一阶段的启动代码。在这个MBR中,只有一个标识为0xEE的分区,以此来表示这块硬盘使用GPT分区表。不能识别GPT硬盘的操作系统通常会识别出一个未知类型的分区,并且拒绝对硬盘进行操作,除非用户特别要求删除这个分区。这就避免了意外删除分区的危险。另外,能够识别GPT分区表的操作系统会检查保护MBR中的分区表,如果分区类型不是0xEE或者MBR分区表中有多个项,也会拒绝对硬盘进行操作。
      • 在使用MBR/GPT混合分区表的硬盘中,这部分存储了GPT分区表的一部分分区(通常是前四个分区),可以使不支持从GPT启动的操作系统从这个MBR启动,启动后只能操作MBR分区表中的分区。如Boot Camp就是使用这种方式启动Windows。
    • LBA1
      • 分区表头定义了硬盘的可用空间以及组成分区表的项的大小和数量。在使用64位Windows Server 2003的机器上,最多可以创建128个分区,即分区表中保留了128个项,其中每个都是128字节。(EFI标准要求分区表最小要有16,384字节,即128个分区项的大小)
      • 分区表头还记录了这块硬盘的GUID,记录了分区表头本身的位置和大小(位置总是在LBA 1)以及备份分区表头和分区表的位置和大小(在硬盘的最后)。它还储存着它本身和分区表的CRC32校验。固件、引导程序和操作系统在启动时可以根据这个校验值来判断分区表是否出错,如果出错了,可以使用软件从硬盘最后的备份GPT中恢复整个分区表,如果备份GPT也校验错误,硬盘将不可使用。所以GPT硬盘的分区表不可以直接使用16进制编辑器修改。
      • 主分区表和备份分区表的头分别位于硬盘的第二个扇区(LBA 1)以及硬盘的最后一个扇区。备份分区表头中的信息是关于备份分区表的。
    • LBA2-33
      • GPT分区表使用简单而直接的方式表示分区。一个分区表项的前16字节是分区类型GUID。例如,EFI系统分区的GUID类型是{C12A7328-F81F-11D2-BA4B-00A0C93EC93B}。接下来的16字节是该分区唯一的GUID(这个GUID指的是该分区本身,而之前的GUID指的是该分区的类型)。再接下来是分区起始和末尾的64位LBA编号,以及分区的名字和属性。

    百度GPT词条(https://baike.baidu.com/item/GPT/15413476

    2、

    创建10G分区

    [root@localhost ~]# fdisk /dev/sdb
    Welcome to fdisk (util-linux 2.23.2).
    
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    
    Device does not contain a recognized partition table
    Building a new DOS disklabel with disk identifier 0x13ceef16.
    
    Command (m for help): n
    Partition type:
       p   primary (0 primary, 0 extended, 4 free)
       e   extended
    Select (default p): p
    Partition number (1-4, default 1): 
    First sector (2048-41943039, default 2048): 
    Using default value 2048
    Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +10G
    Partition 1 of type Linux and of size 10 GiB is set
    
    Command (m for help): w
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    Syncing disks.
    

    重读磁盘分区表

    [root@localhost ~]# partx -a /dev/sdb1
    partx: /dev/sdb: error adding partition 1
    [root@localhost ~]# cat /proc/partitions
    major minor  #blocks  name
    
       2        0          4 fd0
       8       16   20971520 sdb
       8       17   10485760 sdb1
       8        0  125829120 sda
       8        1    1048576 sda1
       8        2  124779520 sda2
      11        0    4481024 sr0
     253        0   52428800 dm-0
     253        1    2097152 dm-1
     253        2   70246400 dm-2
    
    [root@localhost ~]# 
    

    格式化磁盘分区

    [root@localhost ~]# mke2fs.ext4 -b 2048 -m 2 -L MYDATA /dev/sdb1
    -bash: mke2fs.ext4: command not found
    [root@localhost ~]# mke2fs -t ext4 -b 2048 -m 2 -L MYDATA /dev/sdb1
    mke2fs 1.42.9 (28-Dec-2013)
    Filesystem label=MYDATA
    OS type: Linux
    Block size=2048 (log=1)
    Fragment size=2048 (log=1)
    Stride=0 blocks, Stripe width=0 blocks
    655360 inodes, 5242880 blocks
    104857 blocks (2.00%) reserved for the super user
    First data block=0
    Maximum filesystem blocks=273678336
    320 block groups
    16384 blocks per group, 16384 fragments per group
    2048 inodes per group
    Superblock backups stored on blocks: 
        16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816, 1327104, 
        2048000, 3981312
    
    Allocating group tables: done                            
    Writing inode tables: done                            
    Creating journal (32768 blocks): done
    Writing superblocks and filesystem accounting information: done   
    

    挂载

    [root@localhost ~]# mkdir /mydata
    [root@localhost ~]# ls /
    bin  boot  dev  etc  home  lib  lib64  media  mnt  mydata  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    [root@localhost ~]# mount -o noexec,noatime -L MYDATA /mydata
    

    设置开机自动挂载

    [root@localhost ~]# vim /etc/fstab
    [root@localhost ~]# tail -1 /etc/fstab
    /dev/sdb1 /mydata                               ext4    defaults,noatime,noexec     0 0
    [root@localhost ~]# ls /mydata/
    lost+found
    

    3、

    创建swap分区

    [root@localhost ~]# fdisk /dev/sdb
    Welcome to fdisk (util-linux 2.23.2).
    
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    
    
    Command (m for help): n
    Partition type:
       p   primary (1 primary, 0 extended, 3 free)
       e   extended
    Select (default p): e
    Partition number (2-4, default 2): 
    First sector (20973568-41943039, default 20973568): 
    Using default value 20973568
    Last sector, +sectors or +size{K,M,G} (20973568-41943039, default 41943039): 
    Using default value 41943039
    Partition 2 of type Extended and of size 10 GiB is set
    
    Command (m for help): n
    Partition type:
       p   primary (1 primary, 1 extended, 2 free)
       l   logical (numbered from 5)
    Select (default p): l
    Adding logical partition 5
    First sector (20975616-41943039, default 20975616): 
    Using default value 20975616
    Last sector, +sectors or +size{K,M,G} (20975616-41943039, default 41943039): +1G
    Partition 5 of type Linux and of size 1 GiB is set
    
    Command (m for help): t
    Partition number (1,2,5, default 5): 
    Hex code (type L to list all codes): 82
    Changed type of partition 'Linux' to 'Linux swap / Solaris'
    
    Command (m for help): w
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    
    WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
    The kernel still uses the old table. The new table will be used at
    the next reboot or after you run partprobe(8) or kpartx(8)
    Syncing disks.
    

    重读磁盘分区表

    [root@localhost ~]# partx -a /dev/sdb
    partx: /dev/sdb: error adding partition 1
    [root@localhost ~]# partx -a /dev/sdb
    partx: /dev/sdb: error adding partitions 1-2
    partx: /dev/sdb: error adding partition 5
    [root@localhost ~]# cat /proc/partitions
    major minor  #blocks  name
    
       2        0          4 fd0
       8       16   20971520 sdb
       8       17   10485760 sdb1
       8       18          1 sdb2
       8       21    1048576 sdb5
       8        0  125829120 sda
       8        1    1048576 sda1
       8        2  124779520 sda2
      11        0    4481024 sr0
     253        0   52428800 dm-0
     253        1    2097152 dm-1
     253        2   70246400 dm-2
    

    启动swap分区

    [root@localhost ~]# mkswap /dev/sdb5
    Setting up swapspace version 1, size = 1048572 KiB
    no label, UUID=245eb860-e845-47f2-9d2e-9c444a7589f5
    [root@localhost ~]# free
                  total        used        free      shared  buff/cache   available
    Mem:        1005656      140556      703660        7644      161440      690796
    Swap:       2097148           0     2097148
    [root@localhost ~]# swapon /dev/sdb5
    [root@localhost ~]# free
                  total        used        free      shared  buff/cache   available
    Mem:        1005656      140660      703552        7644      161444      690692
    Swap:       3145720           0     3145720
    

    4、编写脚本计算/etc/passwd文件中第10个用户和第20个用户id号之和。

    [root@localhost ~]# cat /tmp/myadd.sh
    #!/bin/bash
    id1=$(head -10 /etc/passwd|tail -1 |cut -d: -f3)
    id2=$(head -20 /etc/passwd|tail -1 |cut -d: -f3)
    
    id_sum=$[$id1+$id2]
    
    echo $id_sum
    

    5、hostname

    [root@localhost ~]# cat /scripts/judge.sh
    hostName=`hostname`
    [ -z "$hostName" -o "$hostName" == "localhost.localdomain" ] && hostname -b magedu.com
    

    6、编写脚本,通过命令行参数传入一个用户名,判断id号是偶数还是奇数。

    [root@niroo ~]# cat /etc/passwd
    ...
    gentoo:x:4003:4003::/users/gentoo:/bin/bash
    fedora:x:4004:4004::/users/fedora:/bin/bash
    ...
    
    [root@localhost ~]# bash /scripts/exer9_2_2.sh gentoo
    gentoo\'s id is odd number
    [root@localhost ~]# bash /scripts/exer9_2_2.sh fedora
    fedora\'s id is even number
    [root@localhost ~]# cat /scripts/exer9_2_2.sh
    #!/bin/bash
    usrId=$(id -u $1)
    if [ $[$usrId % 2 ] -eq 0 ];then
        echo "$1\'s id is even number"
    else
        echo "$1\'s id is odd number"
    fi
    

    7、LVM

    LVM: Logical Volume Manager, Version: 2

    dm: device mapper,将一个或多个底层块设备组织成一个逻辑设备的模块;

    /dev/dm-#
    
        /dev/mapper/VG_NAME-LV_NAME
            /dev/mapper/vol0-root
        /dev/VG_NAME/LV_NAME
            /dev/vol0/root
    

    • pv管理工具:
      pvs:简要pv信息显示
      pvdisplay:显示pv的详细信息
      pvcreate /dev/DEVICE: 创建pv
      pvmove:移动pv上的pe至其他pv上

    • vg管理工具:
      vgs
      vgdisplay
      vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
      vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
      vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...] 先做pvmove
      vgremove

    • lv管理工具:
      lvs
      lvdisplay
      lvcreate -L #[mMgGtT] -n NAME VolumeGroup
      lvremove /dev/VG_NAME/LV_NAME

      • 扩展逻辑卷:

        1. 扩展lv
          lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
        2. 扩展后resize
          resize2fs /dev/VG_NAME/LV_NAME
      • 缩减逻辑卷:

        1. 先卸载文件系统
          umount /dev/VG_NAME/LV_NAME
        2. 文件系统强制检测
          e2fsck -f /dev/VG_NAME/LV_NAME
        3. resize
          resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]
        4. 缩减lv
          lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
        5. 重新挂载
          mount
    • 快照:snapshot
      lvcreate -L #[mMgGtT] -p r -s -n snapshot_lv_name original_lv_name

    lvm实际操作https://www.jianshu.com/p/fcaaccd67e67


    相关文章

      网友评论

          本文标题:week_4_磁盘管理及shell判断逻辑

          本文链接:https://www.haomeiwen.com/subject/xgvhyqtx.html