#10 Linux硬盘管理

简介:

1.存储管理

传统的磁盘分区

RAID技术,软RAID的实现

LVM

文件系统管理

ext,xfs,btrfs(了解)

2.程序包管理

rpm、yum、dnf

3.sed、gawk

4.进程管理

5.网络管理

网络基础只是(Cisco CCNA+CCNP)

网络的属性管理

网络参数监测

6.Linux内核管理

内核编译和安装

内核的裁剪

定制内核

7.Linux系统启动流程

centos5、6、7

8.系统安装

kickstart、dhcp、pxe

9.shell脚本的完善


Linux储存管理

磁盘的接口类型:

IDE:并口,来源于ATA,133Mbps

SCSI:并口,

UltraSCSI320:320Mbps

UltraSCSI640:640Mbps

窄带:7  14

宽带:15 30

SATA:serial ATA,串口

SATA1 2 3 6Gbps

SAS:串口

6Gbps

USB:

1.0 1.1 2.0 3.0:480Mbps 3.1:10Gbps


    双通道:160Mbps


    IOPS:每秒IO次数


      IDE:机械硬盘,50IOPS

     SCSI:机械硬盘,100-200IOPS

     固态硬盘,400左右

     SATA:机械硬盘,100左右

     固态硬盘,400左右

      SAS:机械硬盘,200左右

       固态硬盘,800左右


     PCI-E固态硬盘:100000+ ES3000 DEC


IDE:主板上两个接口,4块IDE硬盘

SATA:4-6接口,4-6块硬盘

SCSI:7 15

SAS:16384块硬盘


写一个脚本,向每个默认shell为bash的用户问好,如:Hi root

#!/bin/bash

#

for I in $(grep "bash$" /etc/passwd | cut -d: -f1) ; do

echo "Hi $I"

done


机械硬盘:

track:磁道,

sector:扇区,512bytes,现在所说的扇区,实际上是平均值;

cylinder:柱面,从磁道向所有盘片做投影;

partition:分区,分区就是基于柱面来划分的储存空间;

head:磁头,每个磁盘表面都有一个磁头;


设备文件:/dev

设备文件是关联到硬件设备的驱动程序和设备的访问入口;


设备号:

major:主设备号,区分设备的类型,用于标明设备所需的驱动程序;

minor:次设备号,区分同种类型下的不同设备,是特定设备的访问入口;


mknod命令:

mknod - make block or character special files

mknod [OPTION]... NAME TYPE [MAJOR MINOR]

       -m, --mode=MODE;指定文件权限

      块设备为b

      字符设备为c


设备类型:

块设备:用于随机访问的设备,数据存储和交换的单位是块;

字符设备:用于线性访问的设备,数据的交换单位一般是字符;


设备文件名:IANA-->ICANN

ICANN的命名标准为:所有的设备都放在/dev/

/dev/

IDE:hd[a-d]

SCSI/SATA/SAS/USB:sd[a-z] sda sdaa


 RHEL6、centos6开始:

  所有的接口类型的硬盘设备统一命名为sd[a-z]


设备引用方式:

设备文件名

卷标(volume lable)

UUID:全局唯一标识符,128bit


如何使用一个新的硬盘设备?

分区

创建文件系统(格式化)

挂在分区


为何分区?

1.优化I/O性能

2.实现磁盘空间的配额限制

3.进行高速修复

4.隔离系统文件和其他程序文件

5.安装多个操作系统


如何分区?

MBR:硬盘空间小于2TB

MBR:master(main) boot record,主引导记录,起源于1982年,

0磁道0扇区:512byte

446bytes:boot loader,引导加载程序,grub

64bytes:partition 

table,分区表,每16bytes表明一个分区的内容,因此一共有四个主分区;

注意:

1.主分区+扩展分区,最多可以有4个,其分区表位的编号依次为:1,2,3,4

2.逻辑分区的编号从5考试,不管前面的四个数字编号是否被占用;

2bytes:结束标记,55AA


GPT:硬盘空间大于2TB

guide partition table,guid分区表,支持128个分区

uefi(统一扩展固件接口)的硬件可以支持GPT,boot legacy


通常使用的分区工具,

fdisk:

用于创建和管理MBR分区,对于一块硬盘,最多只能管理15个分区;


gdisk:gun disk

用于创建和管理gpt分区,


如果使用fdisk或gdisk命令对于已经有分区并挂载的磁盘的剩余空间进行再次分区,分区的信息即便是保存了,也不会被内核重新读取;如果要让内核识别此类分区:

1.重启计算机

2.partprobe命令或者partx命令,强制内核重读分区表;

centos5/7:partprobe -a [device]

如果省略了设备名,则表示重读所有磁盘的分区表

centos6/7:partprobe -a [device]

 partx -af [device]


    fdisk分区示例:

     fdisk - Partition table manipulator for Linux


     fdisk -l [-u] [device...]

     查看指定磁盘的分区表,如果省略device参数,则显示所有磁盘设备的分区表;


     fdisk device

     对于指定设备进行分区管理;


     fdisk子命令:

         d  delete a partition

         l  list known partition types

         m  print this menu

         n  add a new partition

           e   extended

           p   primary partition(1-4)

           l   logical

         p  print the partition table

          q  quit without saving changes

         t  change a partition's system id

         w  write table to disk and exit



parted:gun

高级分区工具,实时生效;

      parted - a partition manipulation program


      parted [options] [device [command [options...]...]]


      parted /dev/sdb mklabel gpt|modos

      parted /dev/sdb print

      parted /dev/sdb mkpart primary 1 200

      parted /dev/sdb rm 1


      echo '- - -' > /sys/class/scsi_host/host2/scan

      强制内核识别在开机状态下插上的SCSI接口的磁盘


写一个脚本,将一个命令所依赖的共享库文件复制到/mnt/sysroot/lib64目录中,如果库文件已经存在于目标目录中,就不复制。

#!/bin/bash

#

DEST=/mnt/sysroot/lib64

if [ ! -d $DEST ] ; then

mkdir -p $DEST

fi


until [ "$CMD" == 'quit' ] ; do

read -p "give me a command: " CMD

if which --skip-alias $CMD &> /dev/null ; then

for I in $(ldd $(which --skip-alias $CMD) | grep -o "/[^[:space:]]\+") ; do

SRCLIB=$(basename $I)

if [ ! -e ${DEST}${SRCLIB} ] ; then

cp $I $DEST

fi

done

else

echo "Command not invalid."

fi

done


  创建文件系统:

   FHS /bin /dev /cet

   权限

   文件的命名规则


   为什么要创建文件系统?

   一百万册图书

   平面分类管理

   想要搜索需要的图书,需要遍历;

   空间分类管理

   门类

   几次有限的但有效的查找即可;


   创建文件系统实际上就是给分区进行储存空间的逻辑编制;


  格式化:

   低级格式化:

   物理层面完成格式化,在磁盘设备出厂时,通过低级格式化来创建磁道;

   主要作用:划分磁道


   高级格式化:

   分区之后进行,

   主要作用:用来创建文件系统,为分区构建逻辑编制单元,Windows系统逻辑单元=簇,Linux系统逻辑单元=块,无论是簇还是块,都是将一个或多个扇区组织在一起,共同完成数据存储;

   簇:512b 1024 2048 4096 8192 16384 32768 65536

   块:1024 2048 4096


   注意:

   1.一个块只能放置一个文件的内容,一个文件可以占用多个块;

   2.如果在某个分区中,将创建大量的小文件,把块划分的小一些;反之,块就大些

   3.如果分区空间比较大,块也应该大一些;


  在一个分区中创建了文件系统:

   首先,会将分区划分成大小相等的若干块;

   元数据块

   元数据——inode(index node)

   文件的属性:

   文件的大小

   文件权限

   文件所有者

   文件时间戳

   数据块指针


   存放元数据的固定的存储空间,称为inode;


   每个inode都有其对应的inode编号


   数据块

   存放文件中所包含的流式数据


   特殊文件:

   设备文件:block special 或 character special

   仅仅是将元素数据中的数据块指针换成了设备号;

   符号链接文件:symbolic link

   仅仅是将元数据中的数据块指针换成了另一个文件的访问路径;


   这类文件只占元数据区域,没有数据块占用:


   随着磁盘空间越来越大,划分的块的数量也越来越多,管理起来很不方便


   划分快租可以解决该问题


   块组:

   每个块组中有独立的元数据块和数据块

   存放数据的时候,以块组内的数据块优先选择,如果块组内的数据块不够,可以通过存储策略来请多个块组协同存储;


   超级块:

   主要定义了有多少个块组,以及每个块组的边界。


   为了防止超级块发生故障导致整个文件系统崩溃,对超级块进行冗余备份


   日志块:

   对于数据的写入操作做记录的块;


   防止数据不一致;


   数据不一致通常都是由不洁关机,不断电导致;


  一个完整的文件系统:

   超级块,inode,inode bitmap,block bitmap,data block,journal block


  想要查找/var/log/messages文件的内容,是怎样的过程?


   首先查找/目录inode编号,从元数据区域中找到对应的inode,再读取inode中的数据块指针,找到/目录的数据块;

   然后,在数据块中查找名称为var的文件名,如果有,就定位其inode编号,再到元数据区域中查找对应编号的inode,再根据数据块指针找到保存var目录内容的数据块;

   再然后,在该数据块中查找名称为log的文件名,如果有,就定位其inode编号,再到元数据区域中查找对应编号的inode,再根据数据块指针找到log目录内容的数据块;

   之后,在该数据块中查找名称为messages的文件名,如果有,就定位其inode编号,再到元数据区域总查找对应编号的inode,再根据数据块指针找到messages文件对应的数据块,就可以读取数据;


  系统调用


  Linux支持的文件系统:

   位于内核空间中的文件系统驱动

   1.内核一部分

   2.内核模块

   位于用户空间中的文件系统管理应用程序

   管理命令


   Linux自己的文件系统:

   ext ext2 ext3 ext4(最大分区50TB,可以做根分区,可以做启动分区)

   xfs(企业级64位文件系统,最大分区500TB,可以做根和启动分区)

   reiserfs(良好的反删除功能)

   btrts(技术预览版)


   光盘文件系统:iso9660

   网络文件系统:NFS、CIFS

   集群文件系统:gfs2、ocfs2

   内核级的分布式文件系统:ceph

   伪文件系统:proc、sysfs、tmpfs、hugepagefs


   Windows的文件系统:vfat、ntfs


   Unix的文件系统:ufs、ffs、jfs、zfs


   交换分区文件系统:swap


   用户空间中的分布式文件系统:mogilefs、moosefs、glusterfs


  对于不同的发行版的Linux,都有其默认的文件系统选择:

   RHEL、centos

   5:ext3

   6:ext4

   7:xfs


文件系统的管理工具:


写一个脚本,如果发现用户hacker登录,则将登录时间和主机记录于日志/var/log/login.log中;

#!/bin/bash

#

if who | grep -q "\<hacker\>" ; then

  for I in $(who | grep "\<hacker\>" | cut -d ' ' -f3-5 --output-delimiter=' '); do

    echo -n $I >> /var/log/login.log

  done

fi


  管理文件系统:

   创建文件系统:

   mkfs

   mkfs.ext2,mkfs.ext3,mkfs.ext4,mkfs.xfs,mkfs.btrfs,...


   文件系统检测和修复工具

   fsck

   fsck.ext2,fsck.ext3,fsck.ext4,fsck.xfs, ...


   文件系统属性查看工具

   dump2fs


   文件系统的属性调整工具

   tune2fs


  创建文件系统工具:

   mkfs命令:

   mkfs - build a Linux filesystem

      mkfs [options] [-t type] [fs-options] device [size]


      mkfs -t ext2 /dev/sdb1


      注意:

       1.不要使用磁盘设备名称和扩展分区设备名称作为mkfs命令的参数;

       如果使用磁盘设备作为mkfs的参数,所有的分区都将被删除

       如果使用扩展分区作为mkfs的参数,所有的逻辑分区都将被删除

       2.能够作为mkfs命令参数的设备,是主分区设备和逻辑分区设备;


    如果只是计划创建ext系列文件系统的话,可以使用mke2fs命令:

     mke2fs

       mke2fs - create an ext2/ext3/ext4 filesystem

         常用选择:

           -b block-size:在创建文件系统时,调整块大小;

           -i bytes-per-inode:指明inode与字节的比率,即:多少个字节可以建一个inode,默认值为16384;

           -I inode-size:直接指明inode的大小

           -j:创建有日志功能的文件系统,就是ext3

           -N number-of-inodes:直接指明要给此文件系统创建的inode的数量;

           -m reserved-blocks-percentage:指定为超级用户root预留的磁盘空间的百分比;默认值是5

           -t fs type:指定文件系统类型,ext2 ext3 ext4,默认是ext2

           -O [^]feature[,...]:关闭或开启文件系统的特性

           -L volume-label:为文件系统指定卷标;


    如果只计划修改ext系列文件系统的卷标,可以使用e2label命令:

     e2label:

     e2label - Change the label on an ext2/ext3/ext4 filesystem

     e2label device [ new-label ]


        注意:如果不加卷标信息,表示查看指定设备卷标;

         如果添加了卷标信息,表示修改指定设备的卷标;


    如果想要修改ext系列文件系统的属性,可以使用tune2fs命令

     tune2fs:

     tune2fs - adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems

     调整那些在ext2,3,4文件系统上的可修改的参数;

     常用选择:

     -j:将ext2文件系统修改为ext3(不能从ext3修改为ext2)

     -m reserved-blocks-percentage:修改为超级用户root预留的磁盘空间的百分比;

     -o [^]mount-options[,...]  :修改文件系统的默认挂载选择;

     -r reserved-blocks-count:修改为超级用户预留的磁盘空间的块的数量;

     -L  vol-ume-name:修改文件系统的卷标

     -O [^]feature[,...]:修改文件系统的特性,将其关闭或启用;

     -l:显示超级块的内容 相当于dumpe2fs -h


文件系统的检测修改工具:

   fsck

   -t fstype:指定要检测的文件系统类型;

   -a:无需交互,自动修复所有问题

   -r:交互式修复问题


   ext系列文件系统专门的检测修复工具:

   e2fsck

   -y:在交互过程的所有的问题,都是以“yes”回答;

   -f:强制检测修复;即使文件系统处于clean状态;


   blkid:

   blkid - command-line utility to locate/print block device attributes

   blkid -L label:根据卷标查找

   blkid -U uuid:根据UUID查找


   findfs:

   findfs - Find a filesystem by label or UUID

   findfs LABEL=label

      findfs UUID=uuid


  创建swap文件系统

   前提:分区类型必须是swap类型

   修改的方法是:在fdisk交互模式中,使用t命令将指定分区的类型修改为82即可:

   mkswap:

   mkswap - set up a Linux swap area

   -L label:设置交互分区的卷标

   -f:强制执行


  使用文件系统——挂载

   FHS


   根文件系统之外的其他文件系统如果想要被访问;都必须通过某种方式关联到根文件系统上,具体做法就是把其他文件系统装载到根文件系统中的某个目录之中;这个过程为“挂载”,用于关联其他文件系统的那个目录,称为挂载点;


   挂载点:mount point,也是其他文件系统的访问入口;例如:/boot

   要求:

   1.作为挂载点的目录必须事先存在;

   2.作为挂载点的目录应该是没有被使用或不能被其他进程使用的目录;

   3.作为挂载点的目录一旦挂载文件系统,其内原有的文件将被隐藏;


   完成挂在操作,使用mount命令:

   mount

   mount - mount a filesystem

   mount [-fnrsvw] [-t vfstype] [-o options] device dir

   常用选项:

   -r, --read-only:以只读的方式挂载目标文件系统;光盘

   -w, --read and write:以读写的方式挂载目标文件系统;

   -n, --no-mtab:默认情况下,设备挂载或卸载的操作会同步更新到/etc/mtab中,如果在挂载时使用了-n选择,则表示我们要禁用此特性,即便挂载成功,也不会更新到/etc/mtab中;

   -t, --types:指明要挂载的设备上创建的文件系统类型;如果省略该选项,mount命令会通过blkid来判断要挂载的目标设备的文件类型;

   -L label:挂载文件系统时,使用卷标代替设备名称

   -U uuid:挂载文件系统时,使用UUID代替设备名称

   -a:mount -a:按照/etc/fstab文件中填写的设备进行自动挂载;

   -o option:

   sync/nosync:同步/异步操作

   atime/noatime:文件或目录被读取访问时,是否更新访问时间戳;

   diratime/nodiratime:目录被读取访问时,是否更新访问时间戳;

   ro/rw:是以只读/读写的方式挂载文件系统;

   dev/nodev:在此文件系统中是否允许创建设备文件;

   exec/noexec:在此文件系统中是否允许运行程序文件;

   auto/noauto:是否允许使用mount -a 方式挂载/etc/fstab中的文件系统;

   user/nouser:是否允许普通用户挂载此文件系统;

   suid/nosuid:是否允许程序上的suid和sgid特殊权限生效;

   relatime/norelatime:是否参考inode访问时间来修改其修改时间和改变时间

   remount:不经卸载实现重新挂载,可以应用新的挂载选项;

   acl:可以使文件系统支持facl功能;

   defaults:默认选项包括:rw, suid, dev, exec, auto, nouser, async, and relatime

   defaults,ro,nosuid

   loop:使用环回设备;将镜像文件挂载到挂载点上

   -B, --bind:将某个目录绑定至另一个目录;

   mount --bind|-B 源目录 目标目录


  卸载文件系统:  

umount: umount_point|device


挂载光盘:

1.保证光盘镜像文件放入虚拟机光驱

2.保证光驱处于“已连接”状态

3.创建光盘挂载点, 


挂载U盘:

需要事先让系统识别U盘设备,然后根据设备名进行挂载:/dev/sdc1


挂载交换分区:

swaponm,swapoff

swapon, swapoff - enable/disable devices and files for paging and swapping


-a:自动挂载存储于/etc/fstab文件中的交互分区设备;


df 

 -h -T -P

free

 -k -m -g


  /etc/fstab文件的格式:

   共6个字段,使用空白字符分隔:

   1.要挂在的设备名:

   设备文件吗

   LABEL

   UUID

   伪文件系统

   2.挂载点:

   swap设备无需挂载点,指定swap即可

   3.文件系统类型:

   4.挂载选项:defaults

   5.转储频路:

   使用dump命令备份分区的频路

   0:表示不备份

   1:每天备份一次

   2:每隔一天备份一次

   6.自检次序:

   0:不自检

   1:优先自检,通常只设置在根文件系统上

   2:次级自检

   ...

   9:最低优先级自检

本文转自谁等了谁 51CTO博客,原文链接:http://blog.51cto.com/12486569/1922284


相关文章
|
28天前
|
监控 Linux Shell
【Shell 命令集合 网络通讯 】Linux 配置和管理网络流量的形状 shapecfg命令 使用指南
【Shell 命令集合 网络通讯 】Linux 配置和管理网络流量的形状 shapecfg命令 使用指南
38 0
|
28天前
|
存储 Shell Linux
【Shell 命令集合 磁盘维护 】Linux 管理硬盘分区 mpartition命令使用教程
【Shell 命令集合 磁盘维护 】Linux 管理硬盘分区 mpartition命令使用教程
36 1
|
28天前
|
存储 监控 Shell
【Shell 命令集合 磁盘管理 】Linux 管理磁盘配额 quota命令使用教程
【Shell 命令集合 磁盘管理 】Linux 管理磁盘配额 quota命令使用教程
35 0
|
23天前
|
存储 算法 Linux
【Linux 应用开发 共享内存】深入理解和实践 ftruncate:共享内存的有效管理
【Linux 应用开发 共享内存】深入理解和实践 ftruncate:共享内存的有效管理
54 5
|
28天前
|
域名解析 网络协议 Linux
【Shell 命令集合 网络通讯 】Linux 设置和管理网络接口配置信息 netconfig命令 使用指南
【Shell 命令集合 网络通讯 】Linux 设置和管理网络接口配置信息 netconfig命令 使用指南
49 1
|
28天前
|
监控 Linux Shell
【Shell 命令集合 网络通讯 】Linux管理终端设备的登录过程 getty命令 使用指南
【Shell 命令集合 网络通讯 】Linux管理终端设备的登录过程 getty命令 使用指南
31 0
|
28天前
|
存储 缓存 Linux
【Shell 命令集合 磁盘维护 】Linux 设置和查看硬盘驱动器参数 hdparm命令使用教程
【Shell 命令集合 磁盘维护 】Linux 设置和查看硬盘驱动器参数 hdparm命令使用教程
35 0
|
28天前
|
搜索推荐 Shell Linux
【Shell 命令集合 系统管理 】Linux 管理用户配置文件 userconf命令 使用指南
【Shell 命令集合 系统管理 】Linux 管理用户配置文件 userconf命令 使用指南
32 2
|
28天前
|
存储 监控 Shell
【Shell 命令集合 磁盘管理 】Linux 设置和管理用户或组的磁盘配额限制 edquota命令使用教程
【Shell 命令集合 磁盘管理 】Linux 设置和管理用户或组的磁盘配额限制 edquota命令使用教程
36 0
|
10天前
|
网络协议 Linux
在Linux中,管理和配置网络接口
在Linux中管理网络接口涉及多个命令,如`ifconfig`(在新版本中被`ip`取代)、`ip`(用于网络设备配置)、`nmcli`(NetworkManager的CLI工具)、`nmtui`(文本界面配置)、`route/ip route`(处理路由表)、`netstat/ss`(显示网络状态)和`hostnamectl/systemctl`(主机名和服务管理)。这些命令帮助用户启动接口、设置IP地址、查看连接和路由信息。不同发行版可能有差异,建议参考相应文档。
19 4