zoukankan      html  css  js  c++  java
  • Linux磁盘分区与文件系统

    一 Linux磁盘分区与文件系统

    在Linux中常见的操作系统有:ext2 ext3 ext4 xfs btrfs reiserfs等
    文件系统的作用主要是明确磁盘或分区上的文件存储方法以及数据结构,Linux系统中数据分为元数据区和数据区,元数据区用于表示数据的属主属组,时间戳,访问权限,数据大小以及数据块指针等,每个文件的元数据会使用一个inode来标识。
    在数据区中每个数据都会给它分配相应的数据块并通过inode来指向所对应的数据块。为了能够加快对数据块的索引,同时还会创建一个块位图来标识可用的数据块。
    为了更加便于管理inode和block,所以就产生了块组的概念。块组是将同一个系统的块分成多个组进行管理,每个组都有独立的block以及inode并使用superblock来标识每个块组。

    1 创建一个10G分区,格式化为ext4.块大小为2048,预留空间比%2,卷标Mydata挂载到/data/mydata且禁止程序自动运行并不更新文件访问时间戳

    (1)[root@localhost ~]# fdisk /dev/sda 通过fdisk命令在sda上新创建一个10G分区
    Command (m for help): n
    Partition type:
    p primary (2 primary, 0 extended, 2 free)
    e extended
    Select (default p): p
    Partition number (3,4, default 3): 3
    First sector (66004992-251658239, default 66004992):
    Using default value 66004992
    Last sector, +sectors or +size{K,M,G} (66004992-251658239, default 251658239): +10GB
    Partition 3 of type Linux and of size 9.3 GiB is set
    (2)[root@localhost ~]# partx -a /dev/sda 让内核识别磁盘中的新分区
    (3)[root@localhost ~]# mke2fs -b 2048 -m 2 -L mydata -t ext4 /dev/sda3 创建了一个ext4的分区,每个块2k,给管理员预留%2的空间
    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
    612352 inodes, 4882944 blocks
    97658 blocks (2.00%) reserved for the super user 预留给管理员的块数
    First data block=0
    Maximum filesystem blocks=273678336 总共的块数
    299 block groups 总共的块组
    16384 blocks per group, 16384 fragments per group 每个块组16384个block
    2048 inodes per group 每个块组有2048个inode
    Superblock backups stored on blocks: 超级块所在的块组
    16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816, 1327104,
    2048000, 3981312

    (4)[root@localhost ~]# mount -t ext4 -o acl,noexec,noatime /dev/sda3 /data/mydata/ 挂载至/data/mydata并且支持acl,禁止程序自动运行以及不更新访问时间戳
    (5)[root@localhost ~]# df -h /data/mydata/ 查看挂载后的结果
    Filesystem Size Used Avail Use% Mounted on
    /dev/sda3 9.2G 13M 8.9G 1% /data/mydata

    2 创建一个大小为1G的swap分区
    [root@localhost ~]# fdisk /dev/sda 创建一个1G分区并将类型给为82(Linux swap)
    Command (m for help): t
    Partition number (1-5, default 5): 5
    Hex code (type L to list all codes): 82
    Changed type of partition 'Linux' to 'Linux swap / Solaris'

    [root@localhost ~]# mkswap /dev/sda5 创建为swap分区
    mkswap: /dev/sda5: warning: wiping old swap signature.
    Setting up swapspace version 1, size = 1048572 KiB

    [root@localhost ~]# swapon /dev/sda5 启用该swap分区

    二 RAID磁盘阵列
    磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意。是将多块磁盘接口使用以实现提升IO能力以及冗余的存储方式

    RAID的级别:RAID分为6钟不同级别,其中常见的有0,1和5以及10结合使用
    RAID 0:0级别又称之为条带,在存储同一个数据时会切分为多个chunk分别存储到不同的设备,可提高IO读写能力但无法提供冗余能力。至少需要两块硬盘,其中一块盘损坏数据就会丢失,可用空间为N*min
    RAID 1:1级别又成为镜像,是将同一份数据在2个或多个硬盘硬盘上同时存储多分,可实现对数据的冗余性并且读能力也会略有提升。至少需要两块硬盘可用空间为1*Min
    RAID 5: 5级别是通过校验码,多块盘中会有一块盘轮流做校验盘实现冗余以及IO能力的提升,至少使用三块盘,最多只能容错一块盘。可用空间:(N-1)*min
    RAID 10: RAID10是将1级别和0级别结合使用,这样既可以提升读写性能又可以实现冗余。先建每组硬盘做成1级别,再将每个磁盘组做成0级别,做多只允许同组里的一块盘损坏,可用空间是N*min/2

    使用mdadm模块化工具创建软RAID

    1 创建一个10G raid1设置chunk为128有一块空闲盘
    [root@localhost ~]# mdadm -C raid1 -c 128 -l 1 -n 2 -x 1 /dev/sda{6,7,8} 创建一个RAID1
    [root@localhost ~]# mdadm -D /dev/md/raid1 / 查看RAID信息
    /dev/md/raid1:
    Version : 1.2
    Creation Time : Sat Sep 2 16:19:05 2017
    Raid Level : raid1
    Array Size : 10477568 (9.99 GiB 10.73 GB)
    Used Dev Size : 10477568 (9.99 GiB 10.73 GB)
    Raid Devices : 2
    Total Devices : 3
    Persistence : Superblock is persistent

    Update Time : Sat Sep 2 16:21:33 2017
    State : clean, resyncing
    Active Devices : 2
    Working Devices : 3
    Failed Devices : 0
    Spare Devices : 1

    Resync Status : 57% complete

    Name : localhost.localdomain:raid1 (local to host localhost.localdomain)
    UUID : f16b9b94:3c463cab:c2d70272:8d1e3577
    Events : 9

    Number Major Minor RaidDevice State
    0 8 6 0 active sync /dev/sda6
    1 8 7 1 active sync /dev/sda7

    2 8 8 - spare /dev/sda8

    [root@localhost ~]# mdadm -f /dev/md/raid1 /dev/sda6 将其中一块磁盘模拟为坏盘

    Number Major Minor RaidDevice State
    2 8 8 0 spare rebuilding /dev/sda8
    1 8 7 1 active sync /dev/sda7

    0 8 6 - faulty /dev/sda6 再次查看时会将备份盘自动添加进去

    2 创建一个4G的RIAD5,chunk为256并格式化为ext4文件系统,开机自动挂载至/backup目录

    [root@localhost ~]# mdadm -C myraid5 -c 256 -l 5 -n 3 /dev/sda{6,7,8} 创建一个RIAD5 (此前先创建了3个分区,每个分区2GB)
    [root@localhost ~]# mke2fs -L raid5 -t ext4 /dev/md/myraid5 将此设备格式化为exit4
    LABEL=raid5 /backup ext4 defaults,acl,atime 0 0 编辑/etc/fstab文件实现开机自动挂载
    [root@localhost ~]# mount -a 挂载fstab中的分区
    [root@localhost ~]# df -h /backup/ 查看该分区
    Filesystem Size Used Avail Use% Mounted on
    /dev/md127 3.9G 16M 3.7G 1% /backup

    三 shell脚本练习

    1 列出当前系统上所有的磁盘设备并显示每个磁盘上每个分区的相关信息

    #!/bin/bash

    disk=`fdisk -l | grep -E -o "^Disk /dev/sd[a-z]" | cut -d" " -f2` 提取出系统上有多少硬盘
    echo this system disks list: $disk

    for i in $disk; do 通过fdisk命令遍历磁盘每个分区
    fdisk -l $i
    done

    2 接受一个以上的文件路径作为参数,显示每个文件的行数并说明本次为几个文件统计了其行数

    #!/bin/bash

    if [ $# -lt 1 ]; then
    echo "At one more arguments"
    exit 1
    fi

    for i in $*; do
    lines=`wc -l $i | cut -d" " -f1 `
    echo $i lines:$lines
    done
    echo files:$#
    [root@localhost scrpit]# ./file_lines.sh /etc/fstab /etc/passwd /etc/fuse.conf /etc/fstab
    /etc/fstab lines:13
    /etc/passwd lines:42
    /etc/fuse.conf lines:2
    /etc/fstab lines:13
    files:4

    3 传递两个以上字符串当作用户名,创建这些用户密码通用户名,总结说共创建了几个用户
    #!/bin/bash
    declare -i sum=0
    if [ $# -lt 1 ]; then 判断如果参数小于1就退出
    echo "At least one arguments"
    exit 1
    else
    for user in $*; do
    [ `echo $user|wc -m` -le 4 ] && echo "Users name at leaset 3 string" && exit 2 如果用户字符小于三个就退出脚本
    if ! id $user &> /dev/null; then
    useradd $user
    echo "$user" | passwd --stdin $user &> /dev/null
    let sum++ 每添加一个用户让sum变量加1
    else
    echo "$user is exist"
    fi
    done
    fi

    echo add users:$sum

    4 写一个脚本新建20个用户,visitor1-visitor20并计算他们UID和

    #!/bin/bash
    declare -i uidsum=0
    for user in {1..20}; do
    id vistor$user &> /dev/null && echo vistor$i is exist && exit 1
    useradd vistor$user
    uid=`id -u vistor$user`
    uidsum=$[$uidsum+$uid]
    done
    echo uidsum:$uidsum

  • 相关阅读:
    IP寻址方式三
    IP通信基础4
    IP通信基础3
    IP通信基础2
    IP通信基础 1
    IP通信基础
    IP通信原理第二周
    设备选型
    常用virsh命令记录
    [转]enable spice html5 console access in openstack kilo(centos)
  • 原文地址:https://www.cnblogs.com/harryblog/p/8064366.html
Copyright © 2011-2022 走看看