Linux
Linux
前言
一、常用操作以及概念
二、磁盘
三、分区
四、文件系统
五、文件
六、压缩与打包
七、Bash
八、管道指令
九、正则表达式
十、进程管理
参考资料
前言 为了便于理解,本文从常用操作和概念开始讲起。虽然已经尽量做到简化,但是涉及到的内容还是有点多。在面试中,Linux 知识点相对于网络和操作系统等知识点而言不是那么重要,只需要重点掌握一些原理和命令即可。为了方便大家准备面试,在此先将一些比较重要的知识点列出来:
能简单使用 cat,grep,cut 等命令进行一些操作;
文件系统相关的原理,inode 和 block 等概念,数据恢复;
硬链接与软链接;
进程管理相关,僵尸进程与孤儿进程,SIGCHLD 。
一、常用操作以及概念 快捷键
Tab:命令和文件名补全;
Ctrl+C:中断正在运行的程序;
Ctrl+D:结束键盘输入(End Of File,EOF)
求助 1. –help 指令的基本用法与选项介绍。
2. man man 是 manual 的缩写,将指令的具体信息显示出来。
当执行 man date
时,有 DATE(1) 出现,其中的数字代表指令的类型,常用的数字及其类型如下:
代号
类型
1
用户在 shell 环境中可以操作的指令或者可执行文件
5
配置文件
8
系统管理员可以使用的管理指令
3. info info 与 man 类似,但是 info 将文档分成一个个页面,每个页面可以跳转。
4. doc /usr/share/doc 存放着软件的一整套说明文件。
关机 1. who 在关机前需要先使用 who 命令查看有没有其它用户在线。
2. sync 为了加快对磁盘文件的读写速度,位于内存中的文件数据不会立即同步到磁盘,因此关机之前需要先进行 sync 同步操作。
3. shutdown 1 2 3 4 5 -k : 不会关机,只是发送警告信息,通知所有在线的用户 -r : 将系统的服务停掉后就重新启动 -h : 将系统的服务停掉后就立即关机 -c : 取消已经在进行的 shutdown
PATH 可以在环境变量 PATH 中声明可执行文件的路径,路径之间用 : 分隔。
1 /usr/ local/bin:/ usr/bin:/ usr/local/ sbin: /usr/ sbin: /home/ dmtsai/.local/ bin: /home/ dmtsai/bin
sudo sudo 允许一般用户使用 root 可执行的命令,不过只有在 /etc/sudoers 配置文件中添加的用户才能使用该指令。
包管理工具 RPM 和 DPKG 为最常见的两类软件包管理工具:
RPM 全称为 Redhat Package Manager,最早由 Red Hat 公司制定实施,随后被 GNU 开源操作系统接受并成为许多 Linux 系统的既定软件标准。YUM 基于 RPM,具有依赖管理和软件升级功能。
与 RPM 竞争的是基于 Debian 操作系统的 DEB 软件包管理工具 DPKG,全称为 Debian Package,功能方面与 RPM 相似。
发行版 Linux 发行版是 Linux 内核及各种应用软件的集成版本。
基于的包管理工具
商业发行版
社区发行版
RPM
Red Hat
Fedora / CentOS
DPKG
Ubuntu
Debian
VIM 三个模式
一般指令模式(Command mode):VIM 的默认模式,可以用于移动游标查看内容;
编辑模式(Insert mode):按下 “i” 等按键之后进入,可以对文本进行编辑;
指令列模式(Bottom-line mode):按下 “:” 按键之后进入,用于保存退出等操作。
在指令列模式下,有以下命令用于离开或者保存文件。
命令
作用
:w
写入磁盘
:w!
当文件为只读时,强制写入磁盘。到底能不能写入,与用户对该文件的权限有关
:q
离开
:q!
强制离开不保存
:wq
写入磁盘后离开
:wq!
强制写入磁盘后离开
GNU GNU 计划,译为革奴计划,它的目标是创建一套完全自由的操作系统,称为 GNU,其内容软件完全以 GPL 方式发布。其中 GPL 全称为 GNU 通用公共许可协议(GNU General Public License),包含了以下内容:
以任何目的运行此程序的自由;
再复制的自由;
改进此程序,并公开发布改进的自由。
开源协议
二、磁盘 磁盘接口 1. IDE IDE(ATA)全称 Advanced Technology Attachment,接口速度最大为 133MB/s,因为并口线的抗干扰性太差,且排线占用空间较大,不利电脑内部散热,已逐渐被 SATA 所取代。
2. SATA SATA 全称 Serial ATA,也就是使用串口的 ATA 接口,抗干扰性强,且对数据线的长度要求比 ATA 低很多,支持热插拔等功能。SATA-II 的接口速度为 300MB/s,而 SATA-III 标准可达到 600MB/s 的传输速度。SATA 的数据线也比 ATA 的细得多,有利于机箱内的空气流通,整理线材也比较方便。
3. SCSI SCSI 全称是 Small Computer System Interface(小型机系统接口),SCSI 硬盘广为工作站以及个人电脑以及服务器所使用,因此会使用较为先进的技术,如碟片转速 15000rpm 的高转速,且传输时 CPU 占用率较低,但是单价也比相同容量的 ATA 及 SATA 硬盘更加昂贵。
4. SAS SAS(Serial Attached SCSI)是新一代的 SCSI 技术,和 SATA 硬盘相同,都是采取序列式技术以获得更高的传输速度,可达到 6Gb/s。此外也通过缩小连接线改善系统内部空间等。
磁盘的文件名 Linux 中每个硬件都被当做一个文件,包括磁盘。磁盘以磁盘接口类型进行命名,常见磁盘的文件名如下:
IDE 磁盘:/dev/hd[a-d]
SATA/SCSI/SAS 磁盘:/dev/sd[a-p]
其中文件名后面的序号的确定与系统检测到磁盘的顺序有关,而与磁盘所插入的插槽位置无关。
查看磁盘分区UUID的四种方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1、使用/dev/disk/by-uuid目录 [root@server ~]# ls -l /dev/disk/by-uuid 总用量 0 lrwxrwxrwx. 1 root root 10 8月 19 00:45 bec50c5d-090c-47ad-83d5-25328b4ab7ec -> .. /.. /sda1 2、使用blkid命令 [root@ server ~]# blkid -s UUID /dev/sda1 /dev/sda1: UUID ="bec50c5d-090c-47ad-83d5-25328b4ab7ec" 3、使用tune2fs命令 [root@ server ~]# tune2fs -l /dev/sda1 |grep 'UUID' Filesystem UUID: bec50c5d-090c-47ad-83d5-25328b4ab7ec 4、使用dumpe2fs命令 [root@ server ~]# dumpe2fs /dev/sda1 |grep 'UUID' dumpe2fs 1.41.12 (17-May-2010) Filesystem UUID: bec50c5d-090c-47ad-83d5-25328b4ab7ec
如何关闭硬盘写缓存(Write Cache) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 http://ilinuxkernel.com/?p=897 如何关闭硬盘写缓存(Write Cache ) AUG17 2011 1 COMMENT WRITTEN BY CHEN在Linux中,有时我们希望打开或关闭硬盘写缓存(Write Cache ),此时可以用hdparm命令来实现。 建议下载最新hdparm版本,网址为: http ://sourceforge.net/projects/hdparm/查看当前硬盘写Cache 状态 root@ubuntu:~/hdparm-9.37 关闭硬盘的写Cache root@ubuntu:~/hdparm-9.37 打开硬盘的写Cache root@ubuntu:~/hdparm-9.37 hdparm其他参数详细说明如下: root@ubuntu:~/hdparm-9.37 hdparm – get /set hard disk parameters – version v9.37 , by Mark Lord. Usage : hdparm [options] [device …]Options: -a Get /set fs readahead -A Get /set the drive look-ahead flag (0 /1 ) -b Get /set bus state (0 == off , 1 == on , 2 == tristate) -B Set Advanced Power Management setting (1 -255 ) -c Get /set IDE 32 -bit IO setting -C Check drive power mode status -d Get /set using_dma flag -D Enable /disable drive defect management -E Set cd/dvd drive speed -f Flush buffer cache for device on exit -F Flush drive write cache -g Display drive geometry -h Display terse usage information -H Read temperature from drive (Hitachi only ) -i Display drive identification -I Detailed/current information directly from drive -k Get /set keep_settings_over_reset flag (0 /1 ) -K Set drive keep_features_over_reset flag (0 /1 ) -L Set drive doorlock (0 /1 ) (removable harddisks only ) -m Get /set multiple sector count -M Get /set acoustic management (0 -254 , 128 : quiet, 254 : fast ) -n Get /set ignore -write-errors flag (0 /1 ) -N Get /set max visible number of sectors (HPA) (VERY DANGEROUS) -p Set PIO mode on IDE interface chipset (0 ,1 ,2 ,3 ,4 ,…) -P Set drive prefetch count -q Change next setting quietly -Q Get /set DMA queue_depth (if supported) -r Get /set device readonly flag (DANGEROUS to set ) -R Obsolete -s Set power -up in standby flag (0 /1 ) (DANGEROUS) -S Set standby (spindown) timeout -t Perform device read timings -T Perform cache read timings -u Get /set unmaskirq flag (0 /1 ) -U Obsolete -v Use defaults ; same as -acdgkmur for IDE drives -V Display program version and exit immediately -w Perform device reset (DANGEROUS) -W Get /set drive write-caching flag (0 /1 ) -x Obsolete -X Set IDE xfer mode (DANGEROUS) -y Put drive in standby mode -Y Put drive to sleep -z Re-read partition table -Z Disable Seagate auto -powersaving mode –dco-freeze Freeze/lock current device configuration until next power cycle –dco-identify Read /dump device configuration identify data –dco-restore Reset device configuration back to factory defaults –direct Use O_DIRECT to bypass page cache for timings –drq-hsm-error Crash system with a “stuck DRQ” error (VERY DANGEROUS) –fallocate Create a file without writing data to disk –fibmap Show device extents (and fragmentation) for a file –fwdownload Download firmware file to drive (EXTREMELY DANGEROUS) –fwdownload-mode3 Download firmware using min -size segments (EXTREMELY DANGEROUS) –fwdownload-mode3-max Download firmware using max -size segments (EXTREMELY DANGEROUS) –fwdownload-mode7 Download firmware using a single segment (EXTREMELY DANGEROUS) –idle-immediate Idle drive immediately –idle-unload Idle immediately and unload heads –Istdin Read identify data from stdin as ASCII hex –Istdout Write identify data to stdout as ASCII hex –make-bad-sector Deliberately corrupt a sector directly on the media (VERY DANGEROUS) –offset use with -t, to begin timings at given offset (in GiB) from start of drive –prefer-ata12 Use 12 -byte (instead of 16 -byte ) SAT commands when possible –read -sector Read and dump (in hex ) a sector directly from the media –security -help Display help for ATA security commands –trim -sector-ranges Tell SSD firmware to discard unneeded data sectors: lba:count .. –trim -sector-ranges-stdin Same as above, but reads lba:count pairs from stdin –verbose Display extra diagnostics from some commands –write-sector Repair /overwrite a (possibly bad) sector directly on the media (VERY DANGEROUS) root@ubuntu:~/hdparm-9.37
Linux创建虚拟块设备并格式化为文件系统 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 https: dd一个文件映射成一个盘 https: https: https: 环境 为了方便学习文件系统的原理和原始数据的分析,需要创建虚拟块设备并格式化为ext4文件系统; Linux创建虚拟块设备 losetup命令 -a 显示所有已经使用的回环设备状态 -d 卸除回环设备 -f 寻找第一个未使用的回环设备 -e <加密选项> 启动加密编码 1. 制作块文件 3 个[root@localhost yaoxu]# dd if =/dev/zero of=loop.img bs=10M count=10000 2. 创建回环设备[root@localhost yaoxu]# losetup /dev/loop1 /home/yaoxu/loop.img 或者 [root@localhost yaoxu]#losetup -f /home/yaoxu/loop.img [root@localhost yaoxu]# ls /dev/loo* /dev/ loop0 /dev/ loop1 /dev/ loop-control[root@localhost yaoxu]# losetup -a /dev/ loop1: [64770 ]:3558 (/home/ yaoxu/loop.img)3. 创建lustre文件系统,并挂载
1 2 3 4 5 6 关于回环设备是什么可以参考如下解释: 回环设备( 'loopback device' )允许用户以一个普通磁盘文件虚拟一个块设备。设想一个磁盘设备,对它的所有读写操作都将被重定向到读写一个名为 disk-image 的普通文件而非操作实际磁盘或分区的轨道和扇区。(当然,disk-image 必须存在于一个实际的磁盘上,而这个磁盘必须比虚拟的磁盘容量更大。)回环设备允许你这样使用一个普通文件。 回环设备以 /dev/loop0、/dev/loop1 等命名。每个设备可虚拟一个块设备。注意只有超级用户才有权限设置回环设备。 回环设备的使用与其它任何块设备相同。特别是,你可以在这个设备上创建文件系统并像普通的磁盘一样将它挂载在系统中。这样的一个将全部内容保存在一个普通文件中的文件系统,被称为虚拟文件系统(virtual file system )(译者注:这个用法并不常见。VFS 通常另有所指,如指代 Linux 内核中有关文件系统抽象的代码层次等)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 1. 什么是loop 设备?loop 设备是一种伪设备,是使用文件来模拟块设备的一种技术,文件模拟成块设备后, 就像一个磁盘或光盘一样使用。在使用之前,一个 loop 设备必须要和一个文件进行连接。这种结合方式给用户提供了一个替代块特殊文件的接口。因此,如果这个文件包含有一个完整的文件系统,那么这个文件就可以像一个磁盘设备一样被 mount 起来。之所以叫loop 设备(回环),其实是从文件系统这一层来考虑的,因为这种被 mount 起来的镜像文件它本身也包含有文件系统,通过loop 设备把它mount起来,它就像是文件系统之上再绕了一圈的文件系统,所以称为 loop 。2. loop 设备的使用一般在linux中会有8 个loop 设备,一般是/dev/loop0~loop7,可用通过losetup -a 查看所有的loop 设备,如果命令没有输出就说明所有的loop 设备都没有被占用,你可以按照以下步骤创建自己的loop 设备。 1 )创建一个文件dd if =/dev/zero of=/var /loop .img bs=1 M count=10240 2 )使用losetup将文件转化为块设备losetup /dev/loop0 /var /loop .img 3 )通过lsblk查看刚刚创建的块设备lsblk |grep loop0 losetup -a 4 )当然,你也可以将这个块设备格式化并创建其他的文件系统,然后再mount到某个目录,有点多余啊,一般人不这么干。5 )要删除这个loop 设备可以执行以下命令losetup -d /dev/loop0 也能参考如下链接: https: https: https: https:
惰性初始化 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 mount的时候: 测试一:惰性初始化 $ time mke2fs -t ext4 /dev/ sdm1 // 惰性初始化(默认) 测试二:关闭惰性初始化 $ time mke2fs -t ext4 -E lazy_itable_init=0 ,lazy_journal_init=0 /dev/ sdm1 // 关闭惰性初始化 惰性初始化的好处就是能迅速的创建文件系统,尽量把初始化的工作推迟到挂载后进行。 不建议在benchmark的时候打开该选项,尤其是与其他文件系统做性能测试对比时,会影响测试结果的公允性。 惰性格式化磁盘: mke2fs -t ext4 -E lazy_itable_init=0 /dev/ vdb 块设备磁盘挂载报:wrong fs type,bad option,bad supe 解决: fsck -y /dev/ sdxxxx 最终执行的是这个修复命令 ext4系统调优: mke2fs -t ext4 -m 0 -b 4096 -O bigalloc,dir_index,extent,extra_isize,flex_bg -E stride=4096 ,stripe-width=4096 /dev/ sde mount -t ext4 -o max_batch_time=0 ,discard,data=writeback,stripe=4096 ,commit=1 ,journal_async_commit,noatime,nodiratime,inode_readahead_blks=1024 /dev/ sde /mnt/ test echo 256 > /sys/ block/sde/ queue/iosched/ fifo_batch echo 400 > /sys/ block/sde/ queue/iosched/ read_expire echo 800 > /sys/ block/sde/ queue/iosched/ write_expire echo 10 > /proc/ sys/vm/ swappiness echo 60 > /proc/ sys/vm/ dirty_ratio echo 500 > /proc/ sys/vm/ dirty_expire_centisecs echo 20 > /proc/ sys/vm/ dirty_background_ratio echo 300 > /proc/ sys/vm/ dirty_writeback_centisecs 浪潮EXT4下流量波动的说明 及调优的情况,@全体成员 ,看下参数调整是否可以用于实际应用
raid卡
1 2 3 4 5 6 7 查看是否带raid卡:udevadm test-builtin blkid "$device" 2 >/dev/null | grep -q "^ID_FS_USAGE=raid" 关于buffer,cache ,wb,wt,clean,inv,flush,以及其他 1. 有时候需要区分buffer和cache :buffer解决CPU写的问题,比如将多次写操作buffer起来一次性更新;cache 解决CPU读的问题,将数据cache 起来在下次读的时候快速取用。2. cache 有两种更新策略:write back和write through。writeback是将待写入memory的数据先放在cache 中,直到cache 位置将被替换时writeback到memory;write through是将数据同时写入cache 和memory。3. invalidate:将cache 数据设置为无效(即discard cache 中的数据),不会将cache 数据写入memory;clean(write back):将cache 数据写进memory;flush:clean and invalidate。4. 对于DMA From Device to Memory来说,invalidate range未必对其到cache line,这时需要首先将非对齐部分clean到memory,然后invalidate cache 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 /opt/zabbix/lldscripts/MegaRAID/MegaCli/MegaCli64 -AdpAllInfo -a0|grep Policy 1 、查看某个盘是否是write through还是write back:【Raid设置直通还是非直通】cat /sys/block/sdm/device/scsi_disk/0 \:2 \:0 \:0 /cache_type 2 、lsscsi -s命令可以看出是否是直通模式:【查看系统设置直通还是非直通】直通模式:原因:[0 :0 :30 :0 ]是0 :0 :x:x开头的 [0 :0 :30 :0 ] disk ATA INTEL SSDSC2KB96 0100 /dev/sda 960 GB [0 :0 :31 :0 ] disk ATA INTEL SSDSC2KB96 0100 /dev/sdb 960 GB [0 :0 :32 :0 ] disk ATA ST4000NM0035-1 V4 TN05 /dev/sdc 4.00 TB [0 :0 :33 :0 ] disk ATA ST4000NM0035-1 V4 TN05 /dev/sdd 4.00 TB [0 :0 :34 :0 ] disk ATA ST4000NM0035-1 V4 TN05 /dev/sde 4.00 TB [0 :0 :35 :0 ] disk ATA ST4000NM0035-1 V4 TN05 /dev/sdf 4.00 TB [0 :0 :36 :0 ] disk ATA ST4000NM0035-1 V4 TN05 /dev/sdg 4.00 TB [0 :0 :37 :0 ] disk ATA ST4000NM0035-1 V4 TN05 /dev/sdh 4.00 TB [0 :0 :38 :0 ] disk ATA ST4000NM0035-1 V4 TN05 /dev/sdi 4.00 TB [0 :0 :39 :0 ] disk ATA ST4000NM0035-1 V4 TN05 /dev/sdj 4.00 TB [0 :0 :40 :0 ] disk ATA ST4000NM0035-1 V4 TN05 /dev/sdk 4.00 TB [0 :0 :41 :0 ] disk ATA ST4000NM0035-1 V4 TN05 /dev/sdl 4.00 TB [0 :2 :0 :0 ] disk AVAGO MR-SAS3316 4.74 /dev/sdm 53.6 GB [0 :2 :1 :0 ] disk AVAGO MR-SAS3316 4.74 /dev/sdn 545 GB 非直通模式:原因:[0 :2 :0 :0 ]是0 :2 :x:x开头的 [root@ host102442549 ~]# lsscsi -s [0 :0 :8 :0 ] enclosu PMCSIERA SXP 24 Sx12G RevB - - [0 :2 :0 :0 ] disk AVAGO INSPUR 4.67 /dev/sda 53.6 GB [0 :2 :1 :0 ] disk AVAGO INSPUR 4.67 /dev/sdb 245 GB [0 :2 :2 :0 ] disk AVAGO INSPUR 4.67 /dev/sdc 959 GB [0 :2 :3 :0 ] disk AVAGO INSPUR 4.67 /dev/sdd 4.00 TB [0 :2 :4 :0 ] disk AVAGO INSPUR 4.67 /dev/sde 4.00 TB [0 :2 :5 :0 ] disk AVAGO INSPUR 4.67 /dev/sdf 4.00 TB [0 :2 :6 :0 ] disk AVAGO INSPUR 4.67 /dev/sdg 4.00 TB [0 :2 :7 :0 ] disk AVAGO INSPUR 4.67 /dev/sdh 4.00 TB [0 :2 :8 :0 ] disk AVAGO INSPUR 4.67 /dev/sdi 4.00 TB [0 :2 :9 :0 ] disk AVAGO INSPUR 4.67 /dev/sdj 4.00 TB [0 :2 :10 :0 ] disk AVAGO INSPUR 4.67 /dev/sdk 4.00 TB 3 、单盘的wt/wb模式:这个应该是单盘raid0,wt/wb要用raid卡命令看: /opt/MegaRAID/storcli/storcli64 /c0 show [root@ host10242491 ~]# /opt/MegaRAID/storcli/storcli64 /c0 show Generating detailed summary of the adapter, it may take a while to complete. Controller = 0 Status = Success Description = None Product Name = INSPUR 3108 MR-2 GB Serial Number = RAH516GV0274A30 SAS Address = 56 c92bf000697634 PCI Address = 00 :04 :00 :00 System Time = 09 /25 /2019 09 :39 :19 Mfg. Date = 12 /01 /17 Controller Time = 09 /25 /2019 09 :39 :17 FW Package Build = 24.12 .0 -0025 BIOS Version = 6.30 .03 .0 _4.17 .08 .00 _0x06130200 FW Version = 4.620 .00 -6101 Driver Name = megaraid_sas Driver Version = 06.803 .01 .00 -rh1 Vendor Id = 0x1000 Device Id = 0x5D SubVendor Id = 0x1BD4 SubDevice Id = 0x14 Host Interface = PCI-E Device Interface = SAS-12 G Bus Number = 4 Device Number = 0 Function Number = 0 Drive Groups = 12 TOPOLOGY : ======== ----------------------------------------------------------------------------- DG Arr Row EID:Slot DID Type State BT Size PDC PI SED DS3 FSpace TR ----------------------------------------------------------------------------- 0 - - - - RAID0 Optl N 3.637 TB enbl N N dflt N N 0 0 - - - RAID0 Optl N 3.637 TB enbl N N dflt N N 0 0 0 45 :0 46 DRIVE Onln N 3.637 TB enbl N N dflt - N 1 - - - - RAID0 Optl N 3.637 TB enbl N N dflt N N 1 0 - - - RAID0 Optl N 3.637 TB enbl N N dflt N N 1 0 0 45 :1 54 DRIVE Onln N 3.637 TB enbl N N dflt - N 2 - - - - RAID0 Optl N 446.625 GB dflt N N dflt N N 2 0 - - - RAID0 Optl N 446.625 GB dflt N N dflt N N 2 0 0 45 :2 47 DRIVE Onln N 446.625 GB dflt N N dflt - N 3 - - - - RAID0 Optl N 446.625 GB dflt N N dflt N N 3 0 - - - RAID0 Optl N 446.625 GB dflt N N dflt N N 3 0 0 45 :3 56 DRIVE Onln N 446.625 GB dflt N N dflt - N 4 - - - - RAID0 Optl N 3.637 TB enbl N N dflt N N 4 0 - - - RAID0 Optl N 3.637 TB enbl N N dflt N N 4 0 0 45 :4 48 DRIVE Onln N 3.637 TB enbl N N dflt - N 5 - - - - RAID0 Optl N 3.637 TB enbl N N dflt N N 5 0 - - - RAID0 Optl N 3.637 TB enbl N N dflt N N 5 0 0 45 :5 55 DRIVE Onln N 3.637 TB enbl N N dflt - N 6 - - - - RAID0 Optl N 3.637 TB enbl N N dflt N N 6 0 - - - RAID0 Optl N 3.637 TB enbl N N dflt N N 6 0 0 45 :6 49 DRIVE Onln N 3.637 TB enbl N N dflt - N 7 - - - - RAID0 Optl N 3.637 TB enbl N N dflt N N 7 0 - - - RAID0 Optl N 3.637 TB enbl N N dflt N N 7 0 0 45 :7 52 DRIVE Onln N 3.637 TB enbl N N dflt - N 8 - - - - RAID0 Optl N 3.637 TB enbl N N dflt N N 8 0 - - - RAID0 Optl N 3.637 TB enbl N N dflt N N 8 0 0 45 :8 50 DRIVE Onln N 3.637 TB enbl N N dflt - N 9 - - - - RAID0 Optl N 3.637 TB enbl N N dflt N N 9 0 - - - RAID0 Optl N 3.637 TB enbl N N dflt N N 9 0 0 45 :9 57 DRIVE Onln N 3.637 TB enbl N N dflt - N 10 - - - - RAID0 Optl N 3.637 TB enbl N N dflt N N 10 0 - - - RAID0 Optl N 3.637 TB enbl N N dflt N N 10 0 0 45 :10 53 DRIVE Onln N 3.637 TB enbl N N dflt - N 11 - - - - RAID0 Optl N 3.637 TB enbl N N dflt N N 11 0 - - - RAID0 Optl N 3.637 TB enbl N N dflt N N 11 0 0 45 :11 51 DRIVE Onln N 3.637 TB enbl N N dflt - N ----------------------------------------------------------------------------- DG=Disk Group Index|Arr=Array Index|Row=Row Index|EID=Enclosure Device ID DID=Device ID|Type=Drive Type|Onln=Online|Rbld=Rebuild|Dgrd=Degraded Pdgd=Partially degraded|Offln=Offline|BT=Background Task Active PDC=PD Cache|PI=Protection Info|SED=Self Encrypting Drive|Frgn=Foreign DS3=Dimmer Switch 3 |dflt=Default|Msng=Missing|FSpace=Free Space Present TR=Transport Ready Virtual Drives = 12 VD LIST : ======= --------------------------------------------------------------- DG/VD TYPE State Access Consist Cache Cac sCC Size Name --------------------------------------------------------------- 0 /0 RAID0 Optl RW Yes RAWBC - ON 3.637 TB 1 /1 RAID0 Optl RW Yes RAWBC - ON 3.637 TB 2 /2 RAID0 Optl RW Yes RAWBC - ON 446.625 GB 3 /3 RAID0 Optl RW Yes RAWBD - ON 446.625 GB 4 /4 RAID0 Optl RW Yes RAWBC - ON 3.637 TB 5 /5 RAID0 Optl RW Yes RAWBC - ON 3.637 TB 6 /6 RAID0 Optl RW Yes RAWBC - ON 3.637 TB 7 /7 RAID0 Optl RW Yes RAWBC - ON 3.637 TB 8 /8 RAID0 Optl RW Yes RAWBC - ON 3.637 TB 9 /9 RAID0 Optl RW Yes RAWBC - ON 3.637 TB 10 /10 RAID0 Optl RW Yes RAWBC - ON 3.637 TB 11 /11 RAID0 Optl RW Yes RAWBC - ON 3.637 TB --------------------------------------------------------------- Cac=CacheCade|Rec=Recovery|OfLn=OffLine|Pdgd=Partially Degraded|Dgrd=Degraded Optl=Optimal|RO=Read Only|RW=Read Write|HD=Hidden|TRANS=TransportReady|B=Blocked| Consist=Consistent|R=Read Ahead Always|NR=No Read Ahead|WB=WriteBack| AWB=Always WriteBack|WT=WriteThrough|C=Cached IO|D=Direct IO|sCC=Scheduled Check Consistency #表示raid 是wb模式 Physical Drives = 12 PD LIST : ======= --------------------------------------------------------------------------------- EID:Slt DID State DG Size Intf Med SED PI SeSz Model Sp Type --------------------------------------------------------------------------------- 45 :0 46 Onln 0 3.637 TB SATA HDD N N 512 B ST4000NM0035-1 V4107 U - 45 :1 54 Onln 1 3.637 TB SATA HDD N N 512 B ST4000NM0035-1 V4107 U - 45 :2 47 Onln 2 446.625 GB SATA SSD N N 512 B INTEL SSDSC2BB480G6 U - 45 :3 56 Onln 3 446.625 GB SATA SSD N N 512 B INTEL SSDSC2BB480G6 U - 45 :4 48 Onln 4 3.637 TB SATA HDD N N 512 B ST4000NM0035-1 V4107 U - 45 :5 55 Onln 5 3.637 TB SATA HDD N N 512 B ST4000NM0035-1 V4107 U - 45 :6 49 Onln 6 3.637 TB SATA HDD N N 512 B ST4000NM0035-1 V4107 U - 45 :7 52 Onln 7 3.637 TB SATA HDD N N 512 B ST4000NM0035-1 V4107 U - 45 :8 50 Onln 8 3.637 TB SATA HDD N N 512 B ST4000NM0035-1 V4107 U - 45 :9 57 Onln 9 3.637 TB SATA HDD N N 512 B ST4000NM0035-1 V4107 U - 45 :10 53 Onln 10 3.637 TB SATA HDD N N 512 B ST4000NM0035-1 V4107 U - 45 :11 51 Onln 11 3.637 TB SATA HDD N N 512 B ST4000NM0035-1 V4107 U - --------------------------------------------------------------------------------- EID-Enclosure Device ID|Slt-Slot No.|DID-Device ID|DG-DriveGroup DHS-Dedicated Hot Spare|UGood-Unconfigured Good|GHS-Global Hotspare UBad-Unconfigured Bad|Onln-Online|Offln-Offline|Intf-Interface Med-Media Type|SED-Self Encryptive Drive|PI-Protection Info SeSz-Sector Size|Sp-Spun|U-Up|D-Down|T-Transition|F-Foreign UGUnsp-Unsupported|UGShld-UnConfigured shielded|HSPShld-Hotspare shielded CFShld-Configured shielded|Cpybck-CopyBack|CBShld-Copyback Shielded http: 如何关闭硬盘写缓存(Write Cache)
应该是内核开的,我记得以前默认都是关闭的, 厂家回复:
storcli64 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 1 、简介(软件见附件) MegaCli 是LSI公司官方提供的SCSI卡管理工具,由于LSI被收购变成了现在的Broadcom,所以现在想下载MegaCli, 需要去Broadcom官网查找Legacy产品支持,搜索MegaRAID即可。 现在官方有storcli,storcli已经基本代替了megacli,整合了LSI和3ware所有产品。 安装方面比较简单,megacli还要Lib_Utils的支持,而storcli只用一个rpm包就可以下载, 去Broadcom官网去找就行了:https://www.broadcom.com/site-search?q=storcli 【附件有】 storcli支持json格式输出,信息解析更加方便。 我个人推荐使用这个软件,因为megacli 工具需要安装额外的软件包,有些服务器客户不允许安装其他的软件包,所以比较麻烦。 这个工具直接安装了之后就可以用。 1.1 服务器信息: [root@xgto01n010244025044 v1]# dmidecode -t 1 Getting SMBIOS data from sysfs. SMBIOS 3.0 present. Handle 0x0001 , DMI type 1 , 27 bytes System Information Manufacturer: Sugon Product Name: I620-G20 Version: Grantley-EP Serial Number: 6100655700926742 UUID: B409F860-C021-11D3-991D-107B44B05C08 Wake-up Type: Power Switch SKU Number: Family: Rack 1.2 系统信息: [root@localhost storcli]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 6.4 (Santiago) 1.3 安装storcli rpm -ivh storcli-1.03.11-1.noarch.rpm 目录: /opt/Mega/storcli 注意版本问题 我这台服务器是DELL R720xd,2012年上线的,所以我用的是storcli.1.03.11版本。 我用的新版本安装之后,执行命令没有输出,所以这一点需要注意。 1.4 一些参数定义: /cx = Controller ID /vx = Virtual Drive Number. /ex = Enclosure ID /sx = Slot ID 1.5 为了管理方便,建立软连接 ln -s /opt/MegaRAID/storcli/storcli64 /bin/storcli ln -s /opt/MegaRAID/storcli/storcli64 /sbin/storcli 如果不想建立软连接,就在/opt/MegaRAID/storcli 目录下 执行./storcli64 指令 2 、查看当前设备raid控制器相关信息 [root@localhost storcli]# ./storcli64 show all 可以看到只有一个控制器 Status Code = 0 Status = Success Description = None Number of Controllers = 1 Host Name = localhost.localdomain Operating System = Linux2.6.32-358.el6.x86_64 System Overview : =============== ------------------------------------------------------------ Ctl Model Ports PDs DGs DNOpt VDs VNOpt BBU sPR DS EHS ASOs ------------------------------------------------------------ 0 Mini 8 14 3 0 3 0 Opt On 3 N 0 【只看到一个控制器】 ------------------------------------------------------------ Ctl=Controller Index|DGs=Drive groups|VDs=Virtual drives|Fld=Failed PDs=Physical drives|DNOpt=DG NotOptimal|VNOpt=VD NotOptimal|Opt=Optimal Msng=Missing|Dgd=Degraded|NdAtn=Need Attention|Unkwn=Unknown sPR=Scheduled Patrol Read|DS=DimmerSwitch|EHS=Emergency Hot Spare Y=Yes|N=No|ASOs=Advanced Software Options|BBU=Battery backup unit ASO : === ---- Ctl ---- 0 ---- Cl=Cluster|MD=Max Disks|WC=Wide Cache|SS=Safe Store|FP=Fast Path|Re=Recovery CR=CacheCade(Read)|RF=Reduced Feature Set|CO=Cache Offload CW=CacheCade(Read/Write)|X=Not Available/Not Installed|U=Unlimited|T=Trial 3 、查看控制器c0的相关信息 [root@localhost storcli]# ./storcli64 /c0 show Controller = 0 Status = Success Description = None Product Name = PERC H710P Mini【控制器型号】 Serial Number = 26300UP SAS Address = 5d4ae520a6bcbc00 Mfg. Date = 06 /04/12 System Time = 05 /22/2019 16 :22:28 Controller Time = 05 /22/2019 08 :22:28 FW Package Build = 21.0 .2 -0001 BIOS Version = 5.30 .00_4.12.05.00_0x05110000 FW Version = 3.130 .05 -1587 Driver Name = megaraid_sas Driver Version = 06.504 .01 .00 -rh1 Controller Bus Type = N/A PCI Slot = N/A PCI Bus Number = 2 PCI Device Number = 0 PCI Function Number = 0 Drive Groups = 3 TOPOLOGY : ======== -------------------------------------------------------------------------- DG Arr Row EID:Slot DID Type State BT Size PDC PI SED DS3 FSpace -------------------------------------------------------------------------- 0 - - - - RAID1 Optl N 278.875 GB dflt N N dflt N 0 0 - - - RAID1 Optl N 278.875 GB dflt N N dflt N 0 0 0 32 :24 24 DRIVE Onln N 278.875 GB dflt N N dflt - 0 0 1 32 :25 25 DRIVE Onln N 278.875 GB dflt N N dflt - 1 - - - - RAID5 Optl N 4.089 TB dflt N N dflt N 1 0 - - - RAID5 Optl N 4.089 TB dflt N N dflt N 1 0 0 32 :0 0 DRIVE Onln N 837.75 GB dflt N N dflt - 1 0 1 32 :1 1 DRIVE Onln N 837.75 GB dflt N N dflt - 1 0 2 32 :2 2 DRIVE Onln N 837.75 GB dflt N N dflt - 1 0 3 32 :3 3 DRIVE Onln N 837.75 GB dflt N N dflt - 1 0 4 32 :4 4 DRIVE Onln N 837.75 GB dflt N N dflt - 1 0 5 32 :5 5 DRIVE Onln N 837.75 GB dflt N N dflt - 2 - - - - RAID5 Optl N 4.089 TB dflt N N dflt N 2 0 - - - RAID5 Optl N 4.089 TB dflt N N dflt N 2 0 0 32 :6 6 DRIVE Onln N 837.75 GB dflt N N dflt - 2 0 1 32 :7 7 DRIVE Onln N 837.75 GB dflt N N dflt - 2 0 2 32 :8 8 DRIVE Onln N 837.75 GB dflt N N dflt - 2 0 3 32 :9 9 DRIVE Onln N 837.75 GB dflt N N dflt - 2 0 4 32 :10 10 DRIVE Onln N 837.75 GB dflt N N dflt - 2 0 5 32 :11 11 DRIVE Onln N 837.75 GB dflt N N dflt - 【可以看到服务器有几个RAID,每个RAID的级别和成员盘】 -------------------------------------------------------------------------- DG=Disk Group Index|Arr=Array Index|Row=Row Index|EID=Enclosure Device ID DID=Device ID|Type=Drive Type|Onln=Online|Rbld=Rebuild|Dgrd=Degraded Pdgd=Partially degraded|Offln=Offline|BT=Background Task Active PDC=PD Cache|PI=Protection Info|SED=Self Encrypting Drive|Frgn=Foreign DS3=Dimmer Switch 3 |dflt=Default|Msng=Missing|FSpace=Free Space Present Virtual Drives = 3 【服务器有三个RAID,两个RAID5一个RAID1】 VD LIST : ======= --------------------------------------------------------------- DG/VD TYPE State Access Consist Cache Cac sCC Size Name --------------------------------------------------------------- 0 /0 RAID1 Optl RW Yes RaWBD R OFF 278.875 GB 1 /1 RAID5 Optl RW Yes RaWBD R OFF 4.089 TB 2 /2 RAID5 Optl RW Yes RaWBD R OFF 4.089 TB --------------------------------------------------------------- Cac=CacheCade|Rec=Recovery|OfLn=OffLine|Pdgd=Partially Degraded|dgrd=Degraded Optl=Optimal|RO=Read Only|RW=Read Write|B=Blocked|Consist=Consistent| Ra=Read Ahead Adaptive|R=Read Ahead Always|NR=No Read Ahead|WB=WriteBack| AWB=Always WriteBack|WT=WriteThrough|C=Cached IO|D=Direct IO|sCC=Scheduled Check Consistency Physical Drives = 14 【十四个物理磁盘】 PD LIST : ======= ------------------------------------------------------------------------- EID:Slt DID State DG Size Intf Med SED PI SeSz Model Sp ------------------------------------------------------------------------- 32 :0 0 Onln 1 837.75 GB SAS HDD N N 512B WD9001BKHG U 32 :1 1 Onln 1 837.75 GB SAS HDD N N 512B WD9001BKHG U 32 :2 2 Onln 1 837.75 GB SAS HDD N N 512B WD9001BKHG U 32 :3 3 Onln 1 837.75 GB SAS HDD N N 512B WD9001BKHG U 32 :4 4 Onln 1 837.75 GB SAS HDD N N 512B WD9001BKHG U 32 :5 5 Onln 1 837.75 GB SAS HDD N N 512B WD9001BKHG U 32 :6 6 Onln 2 837.75 GB SAS HDD N N 512B WD9001BKHG U 32 :7 7 Onln 2 837.75 GB SAS HDD N N 512B WD9001BKHG U 32 :8 8 Onln 2 837.75 GB SAS HDD N N 512B WD9001BKHG U 32 :9 9 Onln 2 837.75 GB SAS HDD N N 512B WD9001BKHG U 32 :10 10 Onln 2 837.75 GB SAS HDD N N 512B WD9001BKHG U 32 :11 11 Onln 2 837.75 GB SAS HDD N N 512B WD9001BKHG U 32 :24 24 Onln 0 278.875 GB SAS HDD N N 512B ST9300603SS U 32 :25 25 Onln 0 278.875 GB SAS HDD N N 512B ST9300605SS U ------------------------------------------------------------------------- EID-Enclosure Device ID|Slt-Slot No .|DID-Device ID|DG-DriveGroup DHS-Dedicated Hot Spare|UGood-Unconfigured Good|GHS-Global Hotspare UBad-Unconfigured Bad|Onln-Online|Offln-Offline|Intf-Interface Med-Media Type|SED-Self Encryptive Drive|PI-Protection Info SeSz-Sector Size|Sp-Spun|U-Up|D-Down|T-Transition|F-Foreign BBU_Info : ======== ------------------------------------------------------------ Model State RetentionTime Temp Mode MfgDate Next Learn ------------------------------------------------------------ BBU Optimal 0 hour(s) 30C 0 2011 /07/18 None ------------------------------------------------------------ 4 、获取enclosure信息 硬盘大多是附在enclosure上不是直接附在controller上。 显示所有的enclosure信息,但是系统中只有一个enclosure ,EID:32. [root@localhost storcli]# ./storcli64 /c0/eall show Controller = 0 Status = Success Description = None Properties : ========== ----------------------------------------------------------------------------- EID State Slots PD PS Fans TSs Alms SIM Port# ProdID VendorSpecific ----------------------------------------------------------------------------- 32 OK 26 14 0 0 0 0 0 Unavailable BP12G+EXP ----------------------------------------------------------------------------- EID-Enclosure Device ID |PD-Physical drive count |PS-Power Supply count| TSs-Temperature sensor count |Alms-Alarm count |SIM-SIM Count 获取单个enclosure ,e32详细信息 [root@localhost storcli]# ./storcli64 /c0/e32 show all Controller = 0 Status = Success Description = None Enclosure /c0/e32 : ================== Information : =========== Device ID = 32 Position = 1 Connector Name = Unavailable Enclosure Type = SES Status = OK FRU Part Number = N/A Enclosure Serial Number = N/A ESM Serial Number = N/A Enclosure Zoning Mode = N/A Partner Device ID = 65535 Inquiry Data : ============ Vendor Identification = DP Product Identification = BP12G+EXP Product Revision Level = 1.07 Properties : ========== ----------------------------------------------------------------------------- EID State Slots PD PS Fans TSs Alms SIM Port# ProdID VendorSpecific ----------------------------------------------------------------------------- 32 OK 26 14 0 0 0 0 0 Unavailable BP12G+EXP ----------------------------------------------------------------------------- EID-Enclosure Device ID |PD-Physical drive count |PS-Power Supply count| TSs-Temperature sensor count |Alms-Alarm count |SIM-SIM Count 5 、显示物理磁盘信息 语法:storcli64 /cx/eall/sall show 显示所有物理磁盘信息 [root@localhost storcli]# ./storcli64 /c0/e32/sall show 【显示e32上的所有物理硬盘】 [root@localhost storcli]# ./storcli64 /c0/eall/sall show【显示所有enclosure下的所有物理硬盘】 Controller = 0 Status = Success Description = Show Drive Information Succeeded. Drive Information : ================= ------------------------------------------------------------------------- EID:Slt DID State DG Size Intf Med SED PI SeSz Model Sp ------------------------------------------------------------------------- 32 :0 0 Onln 1 837.75 GB SAS HDD N N 512B WD9001BKHG U 32 :1 1 Onln 1 837.75 GB SAS HDD N N 512B WD9001BKHG U 32 :2 2 Onln 1 837.75 GB SAS HDD N N 512B WD9001BKHG U 32 :3 3 Onln 1 837.75 GB SAS HDD N N 512B WD9001BKHG U 32 :4 4 Onln 1 837.75 GB SAS HDD N N 512B WD9001BKHG U 32 :5 5 Onln 1 837.75 GB SAS HDD N N 512B WD9001BKHG U 32 :6 6 Onln 2 837.75 GB SAS HDD N N 512B WD9001BKHG U 32 :7 7 Onln 2 837.75 GB SAS HDD N N 512B WD9001BKHG U 32 :8 8 Onln 2 837.75 GB SAS HDD N N 512B WD9001BKHG U 32 :9 9 Onln 2 837.75 GB SAS HDD N N 512B WD9001BKHG U 32 :10 10 Onln 2 837.75 GB SAS HDD N N 512B WD9001BKHG U 32 :11 11 Onln 2 837.75 GB SAS HDD N N 512B WD9001BKHG U 32 :24 24 Onln 0 278.875 GB SAS HDD N N 512B ST9300603SS U 32 :25 25 Onln 0 278.875 GB SAS HDD N N 512B ST9300605SS U ------------------------------------------------------------------------- EID-Enclosure Device ID|Slt-Slot No .|DID-Device ID|DG-DriveGroup DHS-Dedicated Hot Spare|UGood-Unconfigured Good|GHS-Global Hotspare【表示有热备盘,DHS专有热备,GHS全局热备】 UBad-Unconfigured Bad|Onln-Online|Offln-Offline|Intf-Interface Med-Media Type|SED-Self Encryptive Drive|PI-Protection Info SeSz-Sector Size|Sp-Spun|U-Up|D-Down|T-Transition|F-Foreign 从上面信息,可以看出: 只有一个控制器,id 为 0 EID,Enclosure Device ID :32 Slot Number,能看到 0 ,1,2,3,4,5,6,7,8,9,10,11,24,25 DG:disk group,0,1,2 size:容量,磁盘容量 intf:接口,SAS Med:介质,ssd 或 hdd 6 、查看raid组详细信息 查看系统里面有几个raid组: [root@localhost storcli]# ./storcli64 /c0/vall show 【查看c0控制下的所有RAID信息】 Controller = 0 Status = Success Description = None Virtual Drives : ============== --------------------------------------------------------------- DG/VD TYPE State Access Consist Cache Cac sCC Size Name --------------------------------------------------------------- 0 /0 RAID1 Optl RW Yes RaWBD R OFF 278.875 GB 1 /1 RAID5 Optl RW Yes RaWBD R OFF 4.089 TB 2 /2 RAID5 Optl RW Yes RaWBD R OFF 4.089 TB 【显示系统有三个raid组】 --------------------------------------------------------------- Cac=CacheCade|Rec=Recovery|OfLn=OffLine|Pdgd=Partially Degraded|dgrd=Degraded Optl=Optimal|RO=Read Only|RW=Read Write|B=Blocked|Consist=Consistent| Ra=Read Ahead Adaptive|R=Read Ahead Always|NR=No Read Ahead|WB=WriteBack| AWB=Always WriteBack|WT=WriteThrough|C=Cached IO|D=Direct IO|sCC=Scheduled Check Consistency 查看V0 (虚拟磁盘0) raid的详细信息 [root@localhost storcli]# ./storcli64 /c0/v0 show all Controller = 0 Status = Success Description = None /c0/v0 : ====== --------------------------------------------------------------- DG/VD TYPE State Access Consist Cache Cac sCC Size Name --------------------------------------------------------------- 0 /0 RAID1 Optl RW Yes RaWBD R OFF 278.875 GB 【V0为RAID1】 --------------------------------------------------------------- Cac=CacheCade|Rec=Recovery|OfLn=OffLine|Pdgd=Partially Degraded|dgrd=Degraded Optl=Optimal|RO=Read Only|RW=Read Write|B=Blocked|Consist=Consistent| Ra=Read Ahead Adaptive|R=Read Ahead Always|NR=No Read Ahead|WB=WriteBack| AWB=Always WriteBack|WT=WriteThrough|C=Cached IO|D=Direct IO|sCC=Scheduled Check Consistency PDs for VD 0 : ============ ------------------------------------------------------------------------- EID:Slt DID State DG Size Intf Med SED PI SeSz Model Sp ------------------------------------------------------------------------- 32 :24 24 Onln 0 278.875 GB SAS HDD N N 512B ST9300603SS U 32 :25 25 Onln 0 278.875 GB SAS HDD N N 512B ST9300605SS U 【可以看到24号和25号盘组成了raid1】 ------------------------------------------------------------------------- EID-Enclosure Device ID|Slt-Slot No .|DID-Device ID|DG-DriveGroup DHS-Dedicated Hot Spare|UGood-Unconfigured Good|GHS-Global Hotspare UBad-Unconfigured Bad|Onln-Online|Offln-Offline|Intf-Interface Med-Media Type|SED-Self Encryptive Drive|PI-Protection Info SeSz-Sector Size|Sp-Spun|U-Up|D-Down|T-Transition|F-Foreign VD0 Properties : ============== Strip Size = 64 KB Span Depth = 1 Number of Drives Per Span = 2 Disk Cache Policy = Disk's Default Encryption = None Data Protection = None Active Operations = None Exposed to OS = Yes Creation Date = 05 -09 -2012 Creation Time = 01 :38:23 PM Emulation type = None 7 、磁盘状态设置 storcli64 /cx/ex/sx set good/offline/online/missing 设置某块磁盘的状态 good 空闲 online/offline 成员盘上下线 missing 设置磁盘为missing状态 磁盘热备 storcli64 /cx/ex/sx add hotsparedrive dgs=x 设置模块磁盘为diskgroup x 的热备盘 storcli64 /cx/ex/sx add hotsparedrive 设置全局热备 storcli64 /cx/ex/sx delete hotsparedrive 磁盘rebuild storcli64 /cx/ex/sx show rebuild 查看rebild storcli64 /cx/ex/sx start rebuild storcli64 /cx/ex/sx stop rebuild 磁盘点灯 storcli64 /cx/ex/sx start locate storcli64 /cx/ex/sx stop locate 磁盘擦除 快速擦除: storcli64 /cx/ex/sx set good storcli64 /cx/fall del|delete [securityKey = xxx] 完全擦除: storcli /cx[/ex]/sx secureerase [force] storcli /cx[/ex]/sx start erase [simple| normal| thorough | standard| threepass | crypto] storcli /cx[/ex]/sx stop erase storcli /cx[/ex]/sx show erase 8 、获取rebuild速率 [root@localhost storcli]# ./storcli64 /c0 show rebuildrate Controller = 0 Status = Success Description = None Controller Properties : ===================== ------------------ Ctrl_Prop Value ------------------ Rebuildrate 30 % ------------------ storcli64 /c0 set rebuildrate=60 设置rebuild速率 9 、清除缓存 清除raid卡,物理磁盘cache storcli64 /c0 flushcache 苦难并非乐事,但能者等闲视之,人生本来就是苦中作乐,切莫长吁短叹,虚度年华。
MegaCli 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 MegaCli使用参考文档(版本包见附件) 安装megacli 下载megacli时,同时包含了一个依赖包。安装megacli时需要安装该包。 [root@localhost ~]# rpm -ivh Lib_Utils-1.00-08.noarch.rpm Preparing... Installing.... 1 :Lib_Utils [root@localhost ~]# cd / [root@localhost /]# rpm -ivh MegaCli-8.00.23-1.i386.rpm Preparing... 1 :MegaCli 注:开机自检时,使用ctrl+y也可直接进入命令行配置界面。 megacli使用 安装megacli后,megacli程序自动安装到/opt/MegaRAID/MegaCli目录下。 [root@localhost MegaCli]# pwd /opt/MegaRAID/MegaCli [root@localhost MegaCli]# ls install.log MegaCli64 查看MegaCli64是一个可以执行的程序,如不可以,使用chmod添加权限即可(chmod 755 Megacli64)。 注意,,ctrl|+y进入命令行后需要区分大小写,系统下megacli不需要区分大小写。 使用./MegaCli64 –help或者./Megacli64 –h查看命令帮助。 查看硬盘列表 [root@localhost MegaCli]# ./MegaCli64 -PDList -aALL Adapter Enclosure Device ID: 252 ----背板 Slot Number: 0 -----硬盘位置 Device Id: 176 Sequence Number: 1 Media Error Count: 0 Other Error Count: 0 Predictive Failure Count: 0 ----上面三行查看硬盘是否有坏道以及smart报错。 Last Predictive Failure Event Seq Number: 0 PD Type: SATA Raw Size: 931.512 GB [0x74706db0 Sectors] Non Coerced Size: 931.012 GB [0x74606db0 Sectors] Coerced Size: 930.390 GB [0x744c8000 Sectors] Firmware state: Unconfigured(good), Spun Up---显示硬盘状态,单独硬盘还是raid中,Firmware state: Online, Spun Up(raid中) SAS Address(0): 0x9281c06686c5355 Connected Port Number: 0 (path0) Inquiry Data: 9WK0CC10ST31000524NS SN11 FDE Capable: Not Capable FDE Enable: Disable Secured: Unsecured Locked: Unlocked Needs EKM Attention: No Foreign State: None Device Speed: 3. 0Gb/s Link Speed: 3. 0Gb/s Media Type: Hard Disk Device 创建raid ./MegaCli -CfgLdAdd -rX[E0:S0,E1:S1,...] [WT|WB] [NORA|RA|ADRA] [Direct|Cached] [CachedBadBBU|NoCachedBadBBU] [-szXXX [-szYYY ...]] [-strpszM] [-Hsp[E0:S0,...]] [-AfterLdX] [-Force]|[FDE|CtrlBased] –aN 非红色部分,如果不填写则使用默认配置,如背板显示不出来,则使用空格代替即可。 [-szXXX [-szYYY ...]] 直接写数字即可,后面省略M,本身代表M。 例如使用四块硬盘创建一个raid5 [root@localhost MegaCli]# ./MegaCli64 -CfgLdadd -r5[252:0,252:1,252:2, 252 :3] -a0 Adapter 0: Created VD 0 Adapter 0: Configured the Adapter!! Exit Code: 0x00 查看raid状态 [root@localhost MegaCli]# ./MegaCli64 -ldinfo -lall -a0 Adapter 0 -- Virtual Drive Information: Virtual Drive: 0 (Target Id: 0 ) Name : RAID Level : Primary-5, Secondary-0, RAID Level Qualifier-3 Size : 2.725 TB State : Optimal Stripe Size : 64 KB Number Of Drives : 4 Span Depth : 1 Default Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU Current Cache Policy: WriteThrough, ReadAheadNone, Direct, No Write Cache if Bad BBU Access Policy : Read/Write Disk Cache Policy : Disk's Default Encryption Type : None Exit Code: 0x00 [root@localhost MegaCli]# ./MegaCli64 -ldinfo -l0 -a0 Adapter 0 -- Virtual Drive Information: Virtual Drive: 0 (Target Id: 0 ) Name : RAID Level : Primary-1, Secondary-0, RAID Level Qualifier-0 Size : 930.390 GB State : Optimal Stripe Size : 64 KB Number Of Drives : 2 Span Depth : 1 Default Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU Current Cache Policy: WriteThrough, ReadAheadNone, Direct, No Write Cache if Bad BBU Access Policy : Read/Write Disk Cache Policy : Disk's Default Encryption Type : None [root@localhost MegaCli]# ./MegaCli64 -ldinfo -l0 -a0 Adapter 0 -- Virtual Drive Information: Virtual Drive: 0 (Target Id: 0 ) Name : RAID Level : Primary-0, Secondary-0, RAID Level Qualifier-0 Size : 1.816 TB State : Optimal Stripe Size : 64 KB Number Of Drives : 2 Span Depth : 1 Default Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU Current Cache Policy: WriteThrough, ReadAheadNone, Direct, No Write Cache if Bad BBU Access Policy : Read/Write Disk Cache Policy : Disk's Default Encryption Type : None Raid状态以及raid中包含哪些硬盘 [root@localhost MegaCli]# ./MegaCli64 -ldpdinfo -a0 删除raid [root@localhost MegaCli]# ./MegaCli64 -cfglddel -l0 -a0 Adapter 0: Deleted Virtual Drive-0(target id-0) Exit Code: 0x00 做热备 【root@localhost MegaCli]# ./MegaCli64 -pdhsp -set -physdrv[252:3] -a0 Adapter: 0: Set Physical Drive at EnclId-252 SlotId-3 as Hot Spare Success. Exit Code: 0x00 查看热备盘状态:Firmware state: Hotspare, Spun Up 热备盘删除 ./MegaCli64 -PDHSP -Rmv -PhysDrv[Ex:Sx] –aALL 5 、uncfgure bad硬盘改成uncfgure good硬盘 MegaCli -PDMakeGood -PhysDrv[E0:S0,E1:S1,...] | [-Force] -aN|-a0,1,2|-aALL Uncfgure bad状态硬盘,无法对其进行操作。 6 、删除foreign信息 MegaCli -CfgForeign -Scan | [-SecurityKey sssssssssss] -aN|-a0,1,2|-aALL MegaCli -CfgForeign -Clear [x]|[-SecurityKey sssssssssss] -aN|-a0,1,2|-aALL x - index of foreign configurations. Optional. All by default. 7 、如何做rebuild 如有热备盘,硬盘掉线后,热备盘会自动rebuild。 热备盘自动rebuid Enclosure Device ID: 252 Slot Number: 2 Device Id: 178 Sequence Number: 6 Media Error Count: 0 Other Error Count: 0 Predictive Failure Count: 0 Last Predictive Failure Event Seq Number: 0 PD Type: SATA Raw Size: 931.512 GB [0x74706db0 Sectors] Non Coerced Size: 931.012 GB [0x74606db0 Sectors] Coerced Size: 930.390 GB [0x744c8000 Sectors] Firmware state: Rebuild SAS Address(0): 0x9281c0667817c71 Connected Port Number: 2 (path0) Inquiry Data: 9WK0BXZLST31000524NS SN11 FDE Capable: Not Capable FDE Enable: Disable Secured: Unsecured Locked: Unlocked Needs EKM Attention: No Foreign State: None Device Speed: 3. 0Gb/s Link Speed: 3. 0Gb/s Media Type: Hard Disk Device 使用MegaCli -PDRbld -ShowProg -PhysDrv [E0:S0,E1:S1,...] -aN|-a0,1,2|-aALL来查看硬盘rebuild进程。 Rebuid结束后,掉线槽位硬盘更换后,自动从热备拷回数据,原热备盘再次变成热备盘, Enclosure Device ID: 252 Slot Number: 1 Device Id: 179 Sequence Number: 2 Media Error Count: 0 Other Error Count: 0 Predictive Failure Count: 0 Last Predictive Failure Event Seq Number: 0 PD Type: SATA Raw Size: 931.512 GB [0x74706db0 Sectors] Non Coerced Size: 931.012 GB [0x74606db0 Sectors] Coerced Size: 930.390 GB [0x744c8000 Sectors] Firmware state: Copyback SAS Address(0): 0x9281c06595f6f7c Connected Port Number: 1 (path0) Inquiry Data: 9WK046MWST31000524NS SN11 FDE Capable: Not Capable FDE Enable: Disable Secured: Unsecured Locked: Unlocked Needs EKM Attention: No Foreign State: None Device Speed: 3. 0Gb/s Link Speed: 3. 0Gb/s Media Type: Hard Disk Device 热备盘在rebuid过程中,更换掉线槽位硬盘,查看该硬盘是否有media error即可,确认硬盘为uncfgure good状态,一般RAID卡都可以copyback,后续硬盘会自动从原热备盘拷回数据。 但是考虑到存在无法copyback的情况,在热备盘rebuild完成后再更换硬盘。 无热备盘情况,更换新硬盘,如果自动rebuild,则正常结束即可,如不自动rebuild,可以配置成热备盘。 8 、查看raid卡日志 9 、显示Raid卡型号,Raid设置,Disk相关信息 10 、查看RAID阵列中掉线的盘 /opt/MegaRAID/MegaCli/MegaCli64 -pdgetmissing -a0
去除raid 0
3.启动过程中执行:ctrl+r 进入raid模式
4.选中RAID 0,按F2,选中Delete Drive Group,按enter选择YES,确认删除
5.按Ctrl+N进入下一页,TAB选择到JBOD,按空格勾选(x),下图是没勾选,选择apply提交
6.以及按Ctrl+p向前查看磁盘是否都做了jbod
查看磁盘型号
lvm
1 2 3 4 5 6 7 8 9 10 11 12 磁盘 [root@ block-storage14 home]# vgs VG #PV #LV #SN Attr VSize VFree datavg 1 1 0 wz--n- 1.34 t 1.24 t systemvg 1 7 0 wz--n- 74.51 g 4.00 m 注释:datavg是数据盘 systemvg是系统盘 lvcreate -L 80 G -n metadatalv datavg lvremove /dev/datavg/data-metadatalv 格式化:mkfs -t ext4 /dev/mapper/datavg-metadatalv
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 https: LVM ——Logical Volume Manager (逻辑卷管理) 逻辑卷管理是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,用来提高磁盘分区管理的灵活性。 一、优点 磁盘空间的动态划分和管理 实现分区的动态拉伸和回缩 二、逻辑卷管理的组成 1 、物理卷(PV——Pvcreate Volume) 物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘。 2 、卷组(VG——Vgcreate Group) 卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统中可以只有一个卷组,也可以拥有多个卷组。 3 、逻辑卷(LV——Lvcreate Volume) 逻辑卷建立在卷组之上,卷中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。 三、LV的创建步骤 LV的创建过程其实是一个先整合、再划分的过程 (1 )添加硬盘或者创建分区,通知内核 (2 )创建物理卷 (3 )创建卷组 (4 )创建逻辑卷 (5 )创建文件系统(mkfs.ext4) (6 )挂载使用(mkdir;mount) 1 、创建分区 划分3 个分区,每个2 G
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 linux环境下,假设有一个磁盘/dev/vdb (ssd磁盘可能是sda或者sdb),一共200G, 要将其分为3个逻辑分区,分别挂载在/mysql , /binlog , /bak 三个目录下 环境:CentOS 7.3 一、创建磁盘分区 fdisk -l /dev/vdb pvcreate /dev/vdb pvs vgcreate datavg /dev/vdb vgs lvcreate -y -n datalv -L 50G datavg lvcreate -y -n binloglv -L 50G datavg lvcreate -y -n baklv -L 99G datavg lvs mkfs.xfs /dev/datavg/datalv mkfs.xfs /dev/datavg/baklv mkfs.xfs /dev/datavg/binloglv mount /dev/datavg/datalv /mysql mount /dev/datavg/binloglv /binlog mount /dev/datavg/baklv /bak df -h -T 二、删除磁盘分区 umount /mysql umount /binlog umount /bak df -h -T lvs lvremove -y /dev/datavg/datalv lvremove -y /dev/datavg/binloglv lvremove -y /dev/datavg/baklv vgremove datavg pvremove /dev/vdb 注意: linux磁盘分区创建与删除会对磁盘上已有的数据造成损坏,谨慎操作。以上命令的详细信息请参考帮助文档,这里不再赘述。
part 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 https://blog.csdn.net/qq_32863631/article/details/76047133 https://www.cnblogs.com/kreo/p/11406217.html https://blog.csdn.net/sfdst/article/details/81167080 https://blog.csdn.net/qq_32863631/article/details/76047133 创建分区: [root@localhost ~]# parted /dev/sdb GNU Parted 1.8 .1 Using /dev/sdb Welcome to GNU Parted! Type ‘help’ to view a list of commands. (parted) mklabel gpt (parted) print (parted) mkpart primary 0 4. 5TB (parted) mkpart primary 4. 5TB 12TB (parted) print (parted) quit 退出 或者 GNU Parted 1.8 .1 Using /dev/sdb Welcome to GNU Parted! Type ‘help’ to view a list of commands. (parted) mklabel gpt (parted) mkpart primary 1 3072 (parted) mkpart primary 3072 6144 (parted) mkpart primary 6144 9216 (parted) mkpart primary 9216 12288 (parted) mkpart primary 12288 15360 (parted) mkpart primary 15360 18432 (parted) mkpart primary 18432 21504 (parted) mkpart primary 21504 24577 (parted) quit mklabel gpt mkpart primary 1 3072 mkpart primary 3072 6144 mkpart primary 6144 9216 mkpart primary 9216 12288 mkpart primary 12288 15360 mkpart primary 15360 18432 mkpart primary 18432 21504 mkpart primary 21504 24577 mkpart primary 24577 434177 disk=`lsblk|grep 2.9 |sed 's/├─//g' |awk '{print $1}' |head -1 |sed 's/[1-9]//g' `;parted /dev/${disk} rm 1 rm 2 rm 3 rm 4 rm 5 rm 6 rm 7 rm 8 rm 9 磁盘开始的位置和磁盘结束的位置,默认单位是M,可以使用unit GB改变默认单位GB for i in `seq 1 8 `;do /home/snbs/ChunkServer/server format -dev=sda${i} -purpose=wcache;done 全闪环境: mkpart primary 1 3072 mkpart primary 3072 6144 mkpart primary 6144 9216 mkpart primary 9216 12288 mkpart primary 12288 15360 mkpart primary 15360 18432 mkpart primary 18432 21504 mkpart primary 21504 763084 删除分区: (parted) p Model: AVAGO AVAGO (scsi) Disk /dev/sdb: 18. 0TB Sector size (logical/physical): 512B/4096B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 17. 4kB 4096GB 4096GB primary (parted) rm 1 (parted) p Model: AVAGO AVAGO (scsi) Disk /dev/sdb: 18. 0TB Sector size (logical/physical): 512B/4096B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags (parted)
fdisk 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [root@host102442553 ~]# fdisk /dev/sdc The device presents a logical sector size that is smaller than the physical sector size. Aligning to a physical sector (or optimal I/O) size boundary is recommended, or performance may be impacted. 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): d Partition number (1 ,2 , default 2 ): 1 Partition 1 is deletedCommand (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. 解决:操作完,执行partprobe(#.为了不reboot就能生效,强制内核重新读取分区表) http://blog.itpub.net/22907091 /viewspace-748118 / https://www.cnblogs.com/zsychanpin/p/6784655. html partprobe包括在parted的rpm软件包中。partprobe能够改动kernel中分区表。使kernel又一次读取分区表。 因此。使用该命令就行创建分区而且在不又一次启动机器的情况下系统可以识别这些分区。
1 2 3 4 https: 一. 创建分区 先查看下是否有磁盘没有分区 fdisk -l
1 2 3 4 5 其中第一个框是已经分好区的磁盘,第二、三个硬盘没有分区。下面开始分区 二.用fdisk 对/dev/ vda 进行分区 fdisk /dev/ vdb 输入m,可以查看命令操作
1 输入n新建一个分区,输入p 建立分区,输入分区编号 1
1 然后会让你设置开始扇区,我填的是开始扇区2048 ,结束,20480
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 其实这个时候,建立好的分区还不能用,还需要挂载才可以用。但是挂载之前,必须要格式化,才行。。。 三. 格式化分区 mkfs.ext4 /dev/vdb 四. 挂载 4.1 挂载分区 4.1 .1 先创建挂载目录 mkdir /lutong 4.1 .2 通知系统内核分区表的变化,不然内核不知道分区(或重启系统) partprobe /dev/vdb 4.1 .3 然后再挂载分区 mount /dev/vdb /lutong 4.1 .4 最后查看挂载是否成功 df -h 补充: 使用工具partprobe让kernel读取分区信息 [root@db2 ~]# partprobe 使用fdisk工具只是将分区信息写到磁盘,如果需要mkfs磁盘分区则需要重启系统, 而使用partprobe则可以使kernel重新读取分区 信息,从而避免重启系统。 4.2 设置开机自动挂载 vim /etc/fstab mount -a 五. 卸载及删除分区 5.1 卸载 umount /dev/vdb 5.2 删除分区 fdisk /dev/sdc m d 1 d w
三、分区 分区表 磁盘分区表主要有两种格式,一种是限制较多的 MBR 分区表,一种是较新且限制较少的 GPT 分区表。
1. MBR MBR 中,第一个扇区最重要,里面有主要开机记录(Master boot record, MBR)及分区表(partition table),其中主要开机记录占 446 bytes,分区表占 64 bytes。
分区表只有 64 bytes,最多只能存储 4 个分区,这 4 个分区为主分区(Primary)和扩展分区(Extended)。其中扩展分区只有一个,它使用其它扇区来记录额外的分区表,因此通过扩展分区可以分出更多分区,这些分区称为逻辑分区。
Linux 也把分区当成文件,分区文件的命名方式为:磁盘文件名 + 编号,例如 /dev/sda1。注意,逻辑分区的编号从 5 开始。
2. GPT 扇区是磁盘的最小存储单位,旧磁盘的扇区大小通常为 512 bytes,而最新的磁盘支持 4 k。GPT 为了兼容所有磁盘,在定义扇区上使用逻辑区块地址(Logical Block Address, LBA),LBA 默认大小为 512 bytes。
GPT 第 1 个区块记录了主要开机记录(MBR),紧接着是 33 个区块记录分区信息,并把最后的 33 个区块用于对分区信息进行备份。这 33 个区块第一个为 GPT 表头纪录,这个部份纪录了分区表本身的位置与大小和备份分区的位置,同时放置了分区表的校验码 (CRC32),操作系统可以根据这个校验码来判断 GPT 是否正确。若有错误,可以使用备份分区进行恢复。
GPT 没有扩展分区概念,都是主分区,每个 LBA 可以分 4 个分区,因此总共可以分 4 * 32 = 128 个分区。
MBR 不支持 2.2 TB 以上的硬盘,GPT 则最多支持到 233 TB = 8 ZB。
3. MBR和GPT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 模拟磁盘损坏: https: https: 目前对于硬盘的分区方式有两种:MBR和GPT。 【MBR的备份和恢复】 采用MBR分区的硬盘中一共有四个分区:扩展分区最多有一个,如果不需要再分逻辑分区,可以没有扩展分区。 我们都知道磁盘上有一个个的磁道,每个磁道上有很多的扇区,从磁盘的外围向内,从0 开始逐渐增加磁道编号,每次磁道中的扇区也是从0 开始进行编号,而MBR这个数据块就位于0 磁道0 扇区。 每个扇区的大小为512 字节,所以磁盘上的MBR的大小就为512 字节,而这512 字节又分为: *主引导程序(偏移地址0000 H--0088 H),它负责从活动分 区中装载,并运行系统引导程序。 *出错信息数据区(偏移地址0089 H--00E1 H为出错信息, 00E2 H--01 BDH全为0 字节。) *分区表(DPT,Disk Partition Table)含4 个分区项,偏移地址01 BEH--01 FDH,每个分区表项长16 个字节,共64 字节为 分区项1 、分区项2 、分区项3 、分区项4 v *结束标志字,偏移地址01 FE--01 FF的2 个字节值为结束标志 55 AA 所以MBR存储的信息很重要,前446 字节的启动引导信息,是当系统启动时由BIOS自举,进行首先查找的地方,根据启动引导中的内容到指定的位置进行加载西东启动文件,所以如果MBR损坏,则系统就启动不起来了。如果启动引导后面的64 字节分区表位损坏了,则系统就不能正常识别磁盘中的分区,系统就会认为该磁盘没有分区,也不能正常加载分区,每16 位字节标识一个分区,所以一个采用MBR分区方式的硬盘只能分四个分区(除逻辑分区),最后的两位结束为也是很重要的,如果没有结束为,系统就不认为这是一个MBR,就会认为这是一个空盘,结束位标志着分区表的结束,也是一个MBR数据区的结束。 在生产的过程中,我们需要对磁盘的MBR区进行一个备份,以备当MBR区损坏时能够恢复。 而且这个备份的文件是不能还放在这个硬盘下的,一定要备份到远程主机上。 我们在开始试验之前需要了解两个东西: /dev/zero文件:这个是一个特殊的字符文件,会不断产生返回值0 , dd 这个命令:这个命令可以对块设备进行读写操作。 我们先来查看一下磁盘的MBR区数据,前512 字节(我们以sda磁盘为例) hexdump -C -n 512 /dev/sda 对磁盘上的MBR区进行备份:(我们以sda盘为例) dd if =/dev/sda of=/app/mbr bs=1 count=512 这条命令将sda盘中的前512 字节的数据读入到/app/mbr这个文件中了,即使没有这个文件,通过这条命令也会自动生成一个该文件,bs后面默认的是以字节为单位,我们也可以跟上单位自定义大小,count是表示有多少块该大小的数据。 备份完之后我们来查看一下是否备份成功,进入/app下进行查看是否生成了备份文件: 当然,这个备份的文件不能放到当前这个磁盘下,如果我们的MBR区域坏了,系统就启动不起来,而且磁盘就进不去,我们的备份文件就根本找不到。所以通常备份文件都是放到远程主机上的,我们将mbr文件远程拷贝到我的另一台Linux上: 好了,既然已经备份好了,我们就可以直接进行mbr的破坏了,同样我们通过dd 命令写入数据,将sda磁盘中的mbr区的数据给破坏掉:dd if =/dev/zero of=/dev/sda bs=1 count=512 我们之前也提到过了,/dev/zero是一个特殊的字符设备,不断的产生0 值,我们将sda前512 字节全部重置为0. 通过hexdump -C -n 512 /dev/sda 查看sda前面512 都变成了0 现在,我们的系统就不能正常的加载启动了,我们需要把这块破坏的硬盘安装到另一台主机上,通过另一台主机进行修复。 在挂载之前我们要先查看一下我们用来添加磁盘的系统中的磁盘,以确定最后我们是否知道我们添加的是那一块磁盘。 首先,我们要知道被破坏的磁盘的磁盘名,否则我们怎么知道我们要把那一个磁盘安装到另一个主机上。打开虚拟机编辑,找到磁盘对应的磁盘文件名。这是为了方便我们接下来在虚拟机文件中找到这个磁盘文件。 按照步骤来: 设备进行添加完成之后,我们进行入系统中查看有没有将此硬盘添加进来: 通过查看,我们发现,虽然我们将磁盘进行了物理的添加,但是系统中,并没有真正的识别,所以我们需要运行echo '- - -' > /sys/class /scsi_host0 /scan 这条命令进行系统的识别,有些时候需要向scsi_host2 中添加。之后我们在来查看会发现多出来一个sde 磁盘,这个磁盘的大小正是我们添加的那块磁盘的大小,所以确定这个就是我们需要修复的那一块磁盘。 为了进一步的确认这就是我们需要恢复的磁盘,我们再来查看一次。下图中,我们发现磁盘的前512 自己全部为0 了。 接下来我们将我们备份的文件,同样的使用dd 命令将备份文件写入到被破坏的磁盘中,小编演示如下: 恢复数据之后要进行查看确认,以确保万无一失。 这个时候我们进行查看磁盘分区情况,看是否会有所改变: 恢复过MBR 分区后,sde 中的分区信息就显示出来了。说明我们恢复成功了。我们将磁盘卸载掉,重新挂回原来的系统上,测试一下看是否能够开机成功。 小编这里显示已经成功的开机了!你那边怎么样了? 一般当我们恢复过之后,其中的分区信息能够显示出来就表明恢复已经成功,我们这个实验是在虚拟机上进行的,现实中的磁盘跟我们的操作思想是一样的。只不过是我们要把磁盘拔下来,插到另一个主机上进行恢复,其思想是完全一样的。 有时候我们没有备份磁盘的MBR 区,但是只要我们有相同分区类型的磁盘(注意:是完全相同的分区类型,其中的数据可以不一样,我们需要的是恢复启动引导和分区表位以及结束位。)也是可以同过这个方法来恢复的。把小编上面演示中的备份文件换成完好的磁盘设备就可以了。
开机检测程序 1. BIOS BIOS(Basic Input/Output System,基本输入输出系统),它是一个固件(嵌入在硬件中的软件),BIOS 程序存放在断电后内容不会丢失的只读内存中。
BIOS 是开机的时候计算机执行的第一个程序,这个程序知道可以开机的磁盘,并读取磁盘第一个扇区的主要开机记录(MBR),由主要开机记录(MBR)执行其中的开机管理程序,这个开机管理程序会加载操作系统的核心文件。
主要开机记录(MBR)中的开机管理程序提供以下功能:选单、载入核心文件以及转交其它开机管理程序。转交这个功能可以用来实现多重引导,只需要将另一个操作系统的开机管理程序安装在其它分区的启动扇区上,在启动开机管理程序时,就可以通过选单选择启动当前的操作系统或者转交给其它开机管理程序从而启动另一个操作系统。
下图中,第一扇区的主要开机记录(MBR)中的开机管理程序提供了两个选单:M1、M2,M1 指向了 Windows 操作系统,而 M2 指向其它分区的启动扇区,里面包含了另外一个开机管理程序,提供了一个指向 Linux 的选单。
安装多重引导,最好先安装 Windows 再安装 Linux。因为安装 Windows 时会覆盖掉主要开机记录(MBR),而 Linux 可以选择将开机管理程序安装在主要开机记录(MBR)或者其它分区的启动扇区,并且可以设置开机管理程序的选单。
2. UEFI BIOS 不可以读取 GPT 分区表,而 UEFI 可以。
四、文件系统 分区与文件系统 对分区进行格式化是为了在分区上建立文件系统。一个分区通常只能格式化为一个文件系统,但是磁盘阵列等技术可以将一个分区格式化为多个文件系统。
组成 最主要的几个组成部分如下:
inode:一个文件占用一个 inode,记录文件的属性,同时记录此文件的内容所在的 block 编号;
block:记录文件的内容,文件太大时,会占用多个 block。
除此之外还包括:
superblock:记录文件系统的整体信息,包括 inode 和 block 的总量、使用量、剩余量,以及文件系统的格式与相关信息等;
block bitmap:记录 block 是否被使用的位图。
文件读取 对于 Ext2 文件系统,当要读取一个文件的内容时,先在 inode 中查找文件内容所在的所有 block,然后把所有 block 的内容读出来。
而对于 FAT 文件系统,它没有 inode,每个 block 中存储着下一个 block 的编号。
磁盘碎片 指一个文件内容所在的 block 过于分散,导致磁盘磁头移动距离过大,从而降低磁盘读写性能。
block 在 Ext2 文件系统中所支持的 block 大小有 1K,2K 及 4K 三种,不同的大小限制了单个文件和文件系统的最大大小。
大小
1KB
2KB
4KB
最大单一文件
16GB
256GB
2TB
最大文件系统
2TB
8TB
16TB
一个 block 只能被一个文件所使用,未使用的部分直接浪费了。因此如果需要存储大量的小文件,那么最好选用比较小的 block。
inode inode 具体包含以下信息:
权限 (read/write/excute);
拥有者与群组 (owner/group);
容量;
建立或状态改变的时间 (ctime);
最近读取时间 (atime);
最近修改时间 (mtime);
定义文件特性的旗标 (flag),如 SetUID…;
该文件真正内容的指向 (pointer)。
inode 具有以下特点:
每个 inode 大小均固定为 128 bytes (新的 ext4 与 xfs 可设定到 256 bytes);
每个文件都仅会占用一个 inode。
inode 中记录了文件内容所在的 block 编号,但是每个 block 非常小,一个大文件随便都需要几十万的 block。而一个 inode 大小有限,无法直接引用这么多 block 编号。因此引入了间接、双间接、三间接引用。间接引用让 inode 记录的引用 block 块记录引用信息。
目录 建立一个目录时,会分配一个 inode 与至少一个 block。block 记录的内容是目录下所有文件的 inode 编号以及文件名。
可以看到文件的 inode 本身不记录文件名,文件名记录在目录中,因此新增文件、删除文件、更改文件名这些操作与目录的写权限有关。
日志 如果突然断电,那么文件系统会发生错误,例如断电前只修改了 block bitmap,而还没有将数据真正写入 block 中。
ext3/ext4 文件系统引入了日志功能,可以利用日志来修复文件系统。
挂载 挂载利用目录作为文件系统的进入点,也就是说,进入目录之后就可以读取文件系统的数据。
目录配置 为了使不同 Linux 发行版本的目录结构保持一致性,Filesystem Hierarchy Standard (FHS) 规定了 Linux 的目录结构。最基础的三个目录如下:
/ (root, 根目录)
/usr (unix software resource):所有系统默认软件都会安装到这个目录;
/var (variable):存放系统或程序运行过程中的数据文件。
五、文件 文件属性 用户分为三种:文件拥有者、群组以及其它人,对不同的用户有不同的文件权限。
使用 ls 查看一个文件时,会显示一个文件的信息,例如 drwxr-xr-x 3 root root 17 May 6 00:14 .config
,对这个信息的解释如下:
drwxr-xr-x:文件类型以及权限,第 1 位为文件类型字段,后 9 位为文件权限字段
3:链接数
root:文件拥有者
root:所属群组
17:文件大小
May 6 00:14:文件最后被修改的时间
.config:文件名
常见的文件类型及其含义有:
9 位的文件权限字段中,每 3 个为一组,共 3 组,每一组分别代表对文件拥有者、所属群组以及其它人的文件权限。一组权限中的 3 位分别为 r、w、x 权限,表示可读、可写、可执行。
文件时间有以下三种:
modification time (mtime):文件的内容更新就会更新;
status time (ctime):文件的状态(权限、属性)更新就会更新;
access time (atime):读取文件时就会更新。
文件与目录的基本操作 1. ls 列出文件或者目录的信息,目录的信息就是其中包含的文件。
1 2 3 4 -a :列出全部的文件 -d :仅列出目录本身 -l :以长数据串行列出,包含文件的属性与权限等等数据
2. cd 更换当前目录。
3. mkdir 创建目录。
4. rmdir 删除目录,目录必须为空。
1 2 rmdir [-p] 目录名称-p :递归删除目录
5. touch 更新文件时间或者建立新文件。
1 2 3 4 5 6 ## touch [-acdmt] filename -a : 更新 atime -c : 更新 ctime,若该文件不存在则不建立新文件 -m : 更新 mtime -d : 后面可以接更新日期而不使用当前日期,也可以使用 --date="日期或时间" -t : 后面可以接更新时间而不使用当前时间,格式为[YYYYMMDDhhmm]
6. cp 复制文件。如果源文件有两个以上,则目的文件一定要是目录才行。
1 2 3 4 5 6 7 8 cp [-adfilprsu] source destination-a :相当于 -dr --preserve =all -d :若来源文件为链接文件,则复制链接文件属性而非文件本身 -i :若目标文件已经存在时,在覆盖前会先询问 -p :连同文件的属性一起复制过去 -r :递归复制 -u :destination 比 source 旧才更新 destination,或 destination 不存在的情况下才复制 --preserve =all :除了 -p 的权限相关参数外,还加入 SELinux 的属性, links, xattr 等也复制了
7. rm 删除文件。
1 2 3 4 5 6 -r :递归删除 解决linux删除文件后空间没有释放问题 https: //www.cnblogs.com/mfryf /p/ 3334451 .html[root@ticketb ~]
8. mv 移动文件。
1 2 3 ## mv [-fiu] source destination ## mv [options] source1 source2 source3 .... directory -f : force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
修改权限 可以将一组权限用数字来表示,此时一组权限的 3 个位当做二进制数字的位,从左到右每个位的权值为 4、2、1,即每个权限对应的数字权值为 r : 4、w : 2、x : 1。
1 ## chmod [-R] xyz dirname/filename
示例:将 .bashrc 文件的权限修改为 -rwxr-xr–。
也可以使用符号来设定权限。
1 2 3 4 5 6 7 8 ## chmod [ugoa] [+-=] [rwx] dirname/filename - u:拥有者- g:所属群组- o:其他人- a:所有人- +:添加权限- -:移除权限- =:设定权限
示例:为 .bashrc 文件的所有用户添加写权限。
默认权限
文件默认权限:文件默认没有可执行权限,因此为 666,也就是 -rw-rw-rw- 。
目录默认权限:目录必须要能够进入,也就是必须拥有可执行权限,因此为 777 ,也就是 drwxrwxrwx。
可以通过 umask 设置或者查看默认权限,通常以掩码的形式来表示,例如 002 表示其它用户的权限去除了一个 2 的权限,也就是写权限,因此建立新文件时默认的权限为 -rw-rw-r–。
目录的权限 文件名不是存储在一个文件的内容中,而是存储在一个文件所在的目录中。因此,拥有文件的 w 权限并不能对文件名进行修改。
目录存储文件列表,一个目录的权限也就是对其文件列表的权限。因此,目录的 r 权限表示可以读取文件列表;w 权限表示可以修改文件列表,具体来说,就是添加删除文件,对文件名进行修改;x 权限可以让该目录成为工作目录,x 权限是 r 和 w 权限的基础,如果不能使一个目录成为工作目录,也就没办法读取文件列表以及对文件列表进行修改了。
链接
1 2 3 -s :默认是实体链接,加 -s 为符号链接 -f :如果目标文件存在时,先删除目标文件
1. 实体链接 在目录下创建一个条目,记录着文件名与 inode 编号,这个 inode 就是源文件的 inode。
删除任意一个条目,文件还是存在,只要引用数量不为 0。
有以下限制:不能跨越文件系统、不能对目录进行链接。
1 2 3 4 34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 crontab 34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab
2. 符号链接 符号链接文件保存着源文件所在的绝对路径,在读取时会定位到源文件上,可以理解为 Windows 的快捷方式。
当源文件被删除了,链接文件就打不开了。
因为记录的是路径,所以可以为目录建立符号链接。
1 2 3 ## ll -i /etc/crontab /root/crontab2 34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab53745909 lrwxrwxrwx. 1 root root 12 Jun 23 22 :31 /root/crontab2 -> /etc/crontab
获取文件内容 1. cat 取得文件内容。
1 2 ## cat [-AbEnTv] filename -n :打印出行号,连同空白行也会有行号,-b 不会
cat突破
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 突破 在搜索引擎项目工作时,看到过研发工程师在调试问题时这样使用了cat——他们启动服务后,使用了命令cat some_data.txt > /dev/null ,虽然当时没有直接向他们请教原委,但这个命令给我留下了深刻的印象: /dev/null 是linux的位桶文件,写入它的内容会永远丢失,从它那里什么也读取不到。一般用法是想丢弃命令产生的标准输出和标准错误时,通常使用command > /dev/null 2 >&1 ,因此,cat some_data.txt > /dev/null 似乎没有任何效果。 当时观察到cat some_data.txt > /dev/null 这个命令的执行时间常长,这说明了some_data.txt这个文件也足够大。但第二次执行这个命令时,执行时间则大大缩减了。 由以上大致可以判断出,该用法是为了将文件内容导入到内存中,以便需要使用文件内容时能够快速获取。一般来说,从硬盘中读取数据需要5 ms到10 ms的时间,而从内存中读取数据时通常只需要50 ns到100 ns的时间,这就是page cache(页高速缓冲存储器)的作用。 总结 这个经历给我的体会是,许多时候,我们认为自己掌握了全部或绝大部分,而实际上,只是因为自己知道的太少,并且不认为自己知道的太少——我们压根不觉得是因为自己不知道。就像美国前国防部长拉姆斯菲尔德说过的那样: because as we know, there are known knowns; there are things we know we know. We also know there are known unknowns; that is to say we know there are some things we do not know. But there are also unknown unknowns - the ones we don't know we don' t know. 我们有已知的已知,已知的未知,以及未知的未知。 其它读文件: cat 由第一行开始显示内容,并将所有内容输出 tac 从最后一行倒序显示内容,并将所有内容输出 more 根据窗口大小,一页一页的显示文件内容 less 和more类似,但其优点可以往前翻页,而且进行可以搜索字符 head 只显示头几行 tail 只显示最后几行 nl 类似于cat -n,显示时输出行号 https: echo "123456789abcdefghjklmnopq" | cut -b 11 -14
2. tac 是 cat 的反向操作,从最后一行开始打印。
3. more 和 cat 不同的是它可以一页一页查看文件内容,比较适合大文件的查看。
4. less 和 more 类似,但是多了一个向前翻页的功能。
5. head 取得文件前几行。
1 2 ## head [-n number] filename -n :后面接数字,代表显示几行的意思
6. tail 是 head 的反向操作,只是取得是后几行。
7. od 以字符或者十六进制的形式显示二进制文件。
column :对齐 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 以将文本结果转换为整齐的表格,上下对齐 命令: Column 使用的参数: -t :表格,默认以空格间隔 -s:需要配合-t使用,指定分隔符 -t举例: [root@uyhd000225 ~]# mount /dev/hda1 on / type ext3 (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) /dev/xvdb1 on /data type ext3 (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) [root@uyhd000225 ~]# mount |column -t /dev/hda1 on / type ext3 (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) /dev/xvdb1 on /data type ext3 (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) -s举例: [root@uyhd000225 testDir]# cat testcolumn Jackie | 18 | male Helen | 20 | female Daniel Liu | 23 | male [root@uyhd000225 testDir]# cat testcolumn | column -s '|' -t Jackie 18 male Helen 20 female Daniel Liu 23 male
stat:文件的状态信息 1 2 3 4 5 6 7 8 9 10 11 12 13 stat 命令文件权限属性设置stat 命令用于显示文件的状态信息。stat 命令的输出信息比ls命令的输出信息要更详细。语法 stat (选项)(参数) 选项 -L:支持符号连接; -f:显示文件系统状态而非文件状态; -t:以简洁方式输出信息; --help :显示指令的帮助信息; --version:显示指令的版本信息。 参数 文件:指定要显示信息的普通文件或者文件系统对应的设备文件名。
paste -d, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [root@host 102442549 ChunkServer]# cat /etc/snbs.conf.back|grep -E "VolDev" |awk -F = '{print $2 }' |sed 's/,/\n/g' sdb sdc sdd sde sdf sdh sdi sdj [root@host 102442549 ChunkServer]# lsblk|grep "5.7G" |awk '{print $1 }' |sed 's/├─//g' sdg1 sdg2 sdg3 sdg4 sdg5 sdg6 sdg7 sdg8 [root@host 102442549 ChunkServer]# cat /etc/snbs.conf.back|grep -E "VolDev" |awk -F = '{print $2 }' |sed 's/,/\n/g' >> disk.txt;lsblk|grep "5.7G" |awk '{print $1 }' |sed 's/├─//g' >> cache.sh [root@host 102442549 ChunkServer]# [root@host 102442549 ChunkServer]# [root@host 102442549 ChunkServer]# paste -d, disk.txt cache.sh sdb,sdg1 sdc,sdg2 sdd,sdg3 sde,sdg4 sdf,sdg5 sdh,sdg6 sdi,sdg7 sdj,sdg8
split 1 2 3 4 5 6 7 8 split -b 10 k date .file -d -a 3 split -l 500000 -d -a 3 $1 value_split -b 300 m date .file -d -a 3 $1 value_split -b 5 m check-error.log -d -a 3 value_split -l 10 date .file 按行切割split -l -d -a 3 value_
qemu-img 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 qemu-img convert -S 8k -f qcow2 CentOS7U3_GLOBAL_64bit_75G_20180404_APP.qcow2 -O raw /dev/sdc1 ----直接将qcow2文件转换并写入sdc1磁盘,记得设置-S 8k ---这个参数指定稀疏拷贝,只写有效数据@王星童 qemu-img convert -S 8k -f qcow2 new_sdoss-50G-20190225.qcow2 -O raw /os_instance/cyq.raw qemu-img convert -S 8k -f qcow2 new_sdoss-50G-20190225.qcow2 -O raw /dev/sdc 在centos7上可以安装这个qemu-img工具,以覆盖方安装。 rpm -ivh --force --nodeps qemu-img-ev-2.6.0-28.el7.centos.10.1.x86_64.rpm ---------------------------------------------------------------------------- 1.yum install qemu-img 2.qcw2镜像转化为raw镜像文件 qemu-img convert -f qcow2 CentOS7U3_GLOBAL_64bit_75G_20180404_APP.qcow2 -O raw CentOS7U3.raw 3.raw镜像转化为qcw2镜像文件 qemu-img convert -f qcow2 win7.raw -O raw win7.qcow2 4.压测环境上传: time qemu-img convert -S 8k -f qcow2 -O raw /os_data/RHEL6U3_GLOBAL_64bit_75G_20180109_APP.qcow2 /mnt/snbsfuse/snpool001/fusetest
dd 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 if 是来源,of是目的。生成一个5G的文件: dd if =/dev/zero of =/tmp/test.txt bs =1M count =5120 dd if =/dev/zero of =/tmp/test.txt bs =1M count =5120 读: dd if =/dev/sdb of =/dev/null bs =4k dd if =/dev/sdb of =/testrw.dbf bs =4k 读磁盘io: 先dd一个5g的文件: dd if =/dev/zero of =/tmp/test.txt bs =1M count =5120 dd if =/dev/zero oflag =direct of =./10GB bs =1M count =10240 dd iflag =direct,nonblock oflag =direct,nonblock if =./bigfile of =/dev/null 金泉洁 2019-01-24 10:20:12 dd if =./bigfile iflag =direct,nonblock of =/dev/null
map:键值 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 读文件放到map中: https://blog.csdn.net/weixin_42651205/article/details/83624574 cat test.txt 000000000007a16000000088:0 000000000007a16000000089:0 000000000007a16300000087:0 000000000007a16800000088:0 ------------------------------------------------------------- #!/bin/bash str=(`cat ./test.txt | awk -F ' ' '{print $1}' `) declare -A mymap; for i in ${!str[@]} do eval $(echo ${str[i]} | awk '{split($0, filearray, ":");print "mymap["filearray[1]"]="filearray[2]}' ) done echo ${!mymap[@]} echo ${mymap[@]} for key in ${!mymap[@]} do echo "${mymap[$key]} " done findkey="keyx" value="valuex" echo ${mymap[$findkey]} if [ ! -n "${mymap[$key]} " ]then mymap[$findkey ]=$value else echo "find value" unset mymap[$findkey ] fi map详解: https://www.cnblogs.com/yy3b2007com/p/11267237.html 在使用map时,需要先声明,否则结果可能与预期不同,array可以不声明 方式1: [root@host102442549 Master] declare -A myMapmyMap["my03" ]="03" echo ${myMap[my03]} [root@host102442549 Master] 03 方式2: [root@host102442549 Master] declare -A myMap=(["my01" ]="01" ["my02" ]="02" )myMap["my03" ]="03" myMap["my04" ]="04" echo ${myMap[my01]} echo ${myMap[my02]} echo ${myMap[my03]} echo ${myMap[my04]} [root@host102442549 Master] 01 02 03 04 输出Map所有的key、value、长度: echo ${!myMap[@]} echo ${myMap[@]} echo ${#myMap[@]} Map遍历: for key in ${!myMap[*]} ;do echo $key echo ${myMap[$key]} done for key in ${!myMap[@]} ;do echo $key echo ${myMap[$key]} done for val in ${myMap[@]} ;do echo $val done 测试: [root@cdh-143 shell-test] #!/bin/sh echo "一、定义Map:declare -A myMap=([\"myMap00\"]=\"00\" [\"myMap01\"]=\"01\")" declare -A myMap=(["my00" ]="00" ["my01" ]="01" )myMap["my02" ]="02" myMap["my03" ]="03" echo "二、输出所有的key:" echo ${!myMap[@]} echo "三、输出所有value:" echo ${myMap[@]} echo "四、输出map的长度:" echo ${#myMap[@]} echo "五、遍历,根据key找到对应的value:" for key in ${!myMap[*]} ;do echo "key:" $key echo "value:" ${myMap[$key]} done echo "六、遍历所有的key:" for key in ${!myMap[@]} ;do echo "key:" $key echo "value:" ${myMap[$key]} done echo "七、遍历所有value:" for val in ${myMap[@]} ;do echo "value:" $val done
8. shuf命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 shuf命令把输入行按随机顺序输出到标准输出。 用法 shuf [选项]... [文件] 或者 shuf -e [选项]... [参数]... 又或者 shuf -i LO-HI [选项]... 常用参数 -e, --echo 将每个参数视为输入行 -i, --input-range=LO-HI 将LO 到HI 的每个数字视为输入行 -n, --head-count=行数 最多输出指定的行数 -o, --output=文件 将结果输出到指定文件而非标准输出 --random-source=文件 从指定文件获得随机比特 -z, --zero-terminated 以0 结束行而非新行 --help 显示此帮助信息并退出 --version 显示版本信息并退出 如果没有指定文件,或者文件为"-" ,则从标准输入读取。 我有一个名为 ostechnix.txt 的文件,内容如下: $ cat ostechnix.txt line1 line2 line3 line4 line5 line6 line7 line8 line9 line10 现在让我们以随机顺序显示上面的行。为此,请运行: $ shuf ostechnix.txt line2 line8 line5 line10 line7 line1 line4 line6 line9 line3 看到了吗?上面的命令将名为 ostechnix.txt 中的行随机排列并输出了结果。 你可能想将输出写入另一个文件。例如,我想将输出保存到 output.txt 中。为此,请先创建 output.txt: $ touch output.txt 然后,像下面使用 -o 标志将输出写入该文件: $ shuf ostechnix.txt -o output.txt 上面的命令将随机随机打乱 ostechnix.txt 的内容并将输出写入 output.txt。你可以使用命令查看 output.txt 的内容: $ cat output.txt line2 line8 line9 line10 line1 line3 line7 line6 line4 line5 我只想显示文件中的任意一行。我该怎么做?很简单! $ shuf -n 1 ostechnix.txt line6 同样,我们可以选择前 “n” 个随机条目。以下命令将只显示前五个随机条目: $ shuf -n 5 ostechnix.txt line10 line4 line5 line9 line3 如下所示,我们可以直接使用 -e 标志传入输入,而不是从文件中读取行: $ shuf -e line1 line2 line3 line4 line5 line1 line3 line5 line4 line2 你也可以传入数字: $ shuf -e 1 2 3 4 5 3 5 1 4 2 要快速在给定范围选择一个,请改用此命令: $ shuf -n 1 -e 1 2 3 4 5 或者,选择下面的任意三个随机数字: $ shuf -n 3 -e 1 2 3 4 5 3 5 1 我们也可以在特定范围内生成随机数。例如,要显示 1 到 10 之间的随机数,只需使用: $ shuf -i 1 -10 1 9 8 2 4 7 6 3 10 5
8. ASCII比较大小 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ASCII比较大小的时候,是比较两个数中的第一个字符 1 )常用字符有128 个,编码从0 到127 。 2 )控制字符:0 ~31 、127 ,共33 个,不可显示; 3 )普通字符:95 个,包括10 个阿拉伯数字、52 个英文大小写字母、33 个运算符。 4 )每个字符占一个字节,7 位,最高位为0 。 常见ASCII码的大小规则,0 -9 <A-Z<a-z: 1 )数字比字母要小。如 “7 ”<“F” 2 )数字0 比数字9 要小,并按0 到9 顺序递增。如 “3 ”<“8 ” 3 )字母A比字母Z要小,并按A到Z顺序递增。如“A”<“Z” 4 )同个字母的大写字母比小写字母要小32 。如“A”<“a” 记住几个常见字母的ASCII码大小: “A”为65 ;“a”为97 ;“0 ”为48 ;
9. 字符串 1 2 1 、字符串或串(String)是由数字、字母、下划线组成的一串字符。一般记为 s=“a1a2···an”(n>=0 )。它是编程语言中表示文本的数据类型。在程序设计中,字符串(string )为符号或数值的一个连续序列,如符号串(一串字符)或二进制数字串(一串二进制数字)。2 、只要用双引号“ ”括起来的都是String
指令与文件搜索 1. which 指令搜索。
2. whereis 文件搜索。速度比较快,因为它只搜索几个特定的目录。
1 ## whereis [-bmsu] dirname/filename
3. locate 文件搜索。可以用关键字或者正则表达式进行搜索。
locate 使用 /var/lib/mlocate/ 这个数据库来进行搜索,它存储在内存中,并且每天更新一次,所以无法用 locate 搜索新建的文件。可以使用 updatedb 来立即更新数据库。
1 2 ## locate [-ir] keyword -r:正则表达式
4. find 文件搜索。可以使用文件的属性和权限进行搜索。
1 2 example: find . -name "shadow*"
① 与时间有关的选项
1 2 3 4 -mtime n :列出在 n 天前的那一天修改过内容的文件 -mtime +n :列出在 n 天之前 (不含 n 天本身) 修改过内容的文件 -mtime -n :列出在 n 天之内 (含 n 天本身) 修改过内容的文件 -newer file : 列出比 file 更新的文件
+4、4 和 -4 的指示的时间范围如下:
② 与文件拥有者和所属群组有关的选项
1 2 3 4 5 6 -uid n -gid n -user name -group name -nouser :搜索拥有者不存在 /etc/passwd 的文件 -nogroup:搜索所属群组不存在于 /etc/group 的文件
③ 与文件权限和名称有关的选项
1 2 3 4 5 6 -name filename -size [+-]SIZE:搜寻比 SIZE 还要大 (+) 或小 (-) 的文件。这个 SIZE 的规格有:c: 代表 byte,k: 代表 1024bytes。所以,要找比 50KB 还要大的文件,就是 -size +50k -type TYPE -perm mode :搜索权限等于 mode 的文件 -perm -mode :搜索权限包含 mode 的文件 -perm /mode :搜索权限包含任一 mode 的文件
#删除多少天之前的文件
1 2 find /mnt/snbslog/snbs -type f -name '*' -mtime +1 -exec rm {} \;基本思路是,find 找到相应的文件,然后执行某个命令。这里是找到N天前的文件,然后执行删除指令。
六、压缩与打包 压缩文件名 Linux 底下有很多压缩文件名,常见的如下:
扩展名
压缩程序
*.Z
compress
*.zip
zip
*.gz
gzip
*.bz2
bzip2
*.xz
xz
*.tar
tar 程序打包的数据,没有经过压缩
*.tar.gz
tar 程序打包的文件,经过 gzip 的压缩
*.tar.bz2
tar 程序打包的文件,经过 bzip2 的压缩
*.tar.xz
tar 程序打包的文件,经过 xz 的压缩
压缩指令 1. gzip gzip 是 Linux 使用最广的压缩指令,可以解开 compress、zip 与 gzip 所压缩的文件。
经过 gzip 压缩过,源文件就不存在了。
有 9 个不同的压缩等级可以使用。
可以使用 zcat、zmore、zless 来读取压缩文件的内容。
1 2 3 4 5 6 $ gzip [-cdtv -c :将压缩的数据输出到屏幕上 -d :解压缩 -t :检验压缩文件是否出错 -v :显示压缩比等信息 -# : # 为数字的意思,代表压缩等级,数字越大压缩比越高,默认为 6
2. bzip2 提供比 gzip 更高的压缩比。
查看命令:bzcat、bzmore、bzless、bzgrep。
1 2 $ bzip2 [-cdkzv-k :保留源文件
3. xz 提供比 bzip2 更佳的压缩比。
可以看到,gzip、bzip2、xz 的压缩比不断优化。不过要注意的是,压缩比越高,压缩的时间也越长。
查看命令:xzcat、xzmore、xzless、xzgrep。
打包 压缩指令只能对一个文件进行压缩,而打包能够将多个文件打包成一个大文件。tar 不仅可以用于打包,也可以使用 gzip、bzip2、xz 将打包文件进行压缩。
1 2 3 4 5 6 7 8 9 10 11 12 $ tar filename... ==打包压缩 $ tar ==查看 $ tar ==解压缩 -z :使用 zip; -j :使用 bzip2; -J :使用 xz; -c :新建打包文件; -t :查看打包文件里面有哪些文件; -x :解打包或解压缩的功能; -v :在压缩/解压缩的过程中,显示正在处理的文件名; -f : filename:要处理的文件; -C 目录 : 在特定目录解压缩。
使用方式
命令
打包压缩
tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称
查 看
tar -jtv -f filename.tar.bz2
解压缩
tar -jxv -f filename.tar.bz2 -C 要解压缩的目录
七、Bash 可以通过 Shell 请求内核提供服务,Bash 正是 Shell 的一种。
特性
命令历史:记录使用过的命令
命令与文件补全:快捷键:tab
命名别名:例如 ll 是 ls -al 的别名
shell scripts
通配符:例如 ls -l /usr/bin/X* 列出 /usr/bin 下面所有以 X 开头的文件
变量操作 对一个变量赋值直接使用 =。
对变量取用需要在变量前加上 $ ,也可以用 ${} 的形式;
输出变量使用 echo 命令。
1 2 3 $ x=abc $ echo $x $ echo ${x}
变量内容如果有空格,必须使用双引号或者单引号。
双引号内的特殊字符可以保留原本特性,例如 x=”lang is $LANG”,则 x 的值为 lang is zh_TW.UTF-8;
单引号内的特殊字符就是特殊字符本身,例如 x=’lang is $LANG’,则 x 的值为 lang is $LANG。
可以使用 指令
或者 $(指令) 的方式将指令的执行结果赋值给变量。例如 version=$(uname -r),则 version 的值为 4.15.0-22-generic。
可以使用 export 命令将自定义变量转成环境变量,环境变量可以在子程序中使用,所谓子程序就是由当前 Bash 而产生的子 Bash。
Bash 的变量可以声明为数组和整数数字。注意数字类型没有浮点数。如果不进行声明,默认是字符串类型。变量的声明使用 declare 命令:
1 2 3 4 5 $ declare [-aixr] variable -a : 定义为数组类型 -i : 定义为整数类型 -x : 定义为环境变量 -r : 定义为 类型
使用 [ ] 来对数组进行索引操作:
1 2 3 $ array [1 ]=a $ array [2 ]=b $ echo ${array [1 ]}
指令搜索顺序
以绝对或相对路径来执行指令,例如 /bin/ls 或者 ./ls ;
由别名找到该指令来执行;
由 Bash 内置的指令来执行;
按 $PATH 变量指定的搜索路径的顺序找到第一个指令来执行。
数据流重定向 重定向指的是使用文件代替标准输入、标准输出和标准错误输出。
1
代码
运算符
标准输入 (stdin)
0
< 或 <<
标准输出 (stdout)
1
> 或 >>
标准错误输出 (stderr)
2
2> 或 2>>
其中,有一个箭头的表示以覆盖的方式重定向,而有两个箭头的表示以追加的方式重定向。
可以将不需要的标准输出以及标准错误输出重定向到 /dev/null,相当于扔进垃圾箱。
如果需要将标准输出以及标准错误输出同时重定向到一个文件,需要将某个输出转换为另一个输出,例如 2>&1 表示将标准错误输出转换为标准输出。
1 $ find /home -name .bashrc > list 2 >&1
八、管道指令 管道是将一个命令的标准输出作为另一个命令的标准输入,在数据需要经过多个步骤的处理之后才能得到我们想要的内容时就可以使用管道。
在命令之间使用 | 分隔各个管道命令。
提取指令 cut 对数据进行切分,取出想要的部分。
切分过程一行一行地进行。
1 2 3 4 $ cut -d :分隔符 -f :经过 -d 分隔后,使用 -f n 取出第 n 个区间 -c :以字符为单位取出区间
示例 1:last 显示登入者的信息,取出用户名。
1 2 3 4 5 6 $ last root pts/1 192.168 .201 .101 Sat Feb 7 12 :35 still logged in root pts/1 192.168 .201 .101 Fri Feb 6 12 :13 - 18 :46 (06 :33 ) root pts/1 192.168 .201 .254 Thu Feb 5 22 :37 - 23 :53 (01 :16 ) $ last | cut -d ' ' -f 1
示例 2:将 export 输出的信息,取出第 12 字符以后的所有字符串。
1 2 3 4 5 6 7 8 $ export declare -x HISTCONTROL ="ignoredups" declare -x HISTSIZE ="1000" declare -x HOME ="/home/dmtsai" declare -x HOSTNAME ="study.centos.vbird" .. .. .(其他省略).. .. .$ export | cut -c 12-
排序指令 sort 用于排序。
1 2 3 4 5 6 7 8 9 $ sort [-fbMnrtuk] [file or stdin] -f :忽略大小写 -b :忽略最前面的空格 -M :以月份的名字来排序,例如 JAN,DEC -n :使用数字 -r :反向排序 -u :相当于 unique,重复的内容只出现一次 -t :分隔符,默认为 tab -k :指定排序的区间
示例:/etc/passwd 文件内容以 : 来分隔,要求以第三列进行排序。
1 2 3 4 5 $ cat /etc/ passwd | sort -t ':' -k 3 root: x: 0 :0 :root: /root:/ bin/bashdmtsai: x: 1000 :1000 :dmtsai: /home/ dmtsai: /bin/ bashalex: x: 1001 :1002 ::/home/ alex: /bin/ basharod: x: 1002 :1003 ::/home/ arod: /bin/ bash
uniq 可以将重复的数据只取一个。
1 2 3 $ uniq [-ic] -i :忽略大小写 -c :进行计数
示例:取得每个人的登录总次数
1 2 3 4 5 6 7 $ last | cut -d ' ' -f 1 | sort | uniq -c 1 6 (unknown47 dmtsai4 reboot7 root1 wtmp
#去除重复行
1 2 3 4 5 sort -n partition_id.txt |uniq|sort -n去重必须搭配sort -n使用 sort -n单独使用是按照数字排序按数字排序:sort -n number .txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 [root@ snbs161-201 -instance opt]# head stat.log /opt/write/1 97792 192 81 a4 0 0 fd05 655362 1 0 0 1573375690 1573375353 1573375353 4096 /opt/write/3 97792 192 81 a4 0 0 fd05 655364 1 0 0 1573375832 1573375724 1573375724 4096 /opt/write/7 97792 192 81 a4 0 0 fd05 655368 1 0 0 1573375835 1573375724 1573375724 4096 /opt/write/5 97792 192 81 a4 0 0 fd05 655366 1 0 0 1573375832 1573375724 1573375724 4096 /opt/write/9 97792 192 81 a4 0 0 fd05 655370 1 0 0 1573375838 1573375724 1573375724 4096 /opt/write/11 97792 192 81 a4 0 0 fd05 655372 1 0 0 1573375832 1573375724 1573375724 4096 /opt/write/8 97792 192 81 a4 0 0 fd05 655369 1 0 0 1573375828 1573375724 1573375724 4096 /opt/write/6 97792 192 81 a4 0 0 fd05 655367 1 0 0 1573375830 1573375724 1573375724 4096 /opt/write/13 97792 192 81 a4 0 0 fd05 655374 1 0 0 1573375832 1573375724 1573375724 4096 /opt/write/10 97792 192 81 a4 0 0 fd05 655371 1 0 0 1573375829 1573375724 1573375724 4096 /opt/write/9992 97792 192 81 a4 0 0 fd05 665353 1 0 0 1573375829 1573375737 1573375737 4096 /opt/write/9991 97792 192 81 a4 0 0 fd05 665352 1 0 0 1573375833 1573375737 1573375737 4096 /opt/write/9993 97792 192 81 a4 0 0 fd05 665354 1 0 0 1573375828 1573375737 1573375737 4096 /opt/write/9994 97792 192 81 a4 0 0 fd05 665355 1 0 0 1573375832 1573375737 1573375737 4096 /opt/write/9995 97792 192 81 a4 0 0 fd05 665356 1 0 0 1573375834 1573375737 1573375737 4096 /opt/write/10000 97792 192 81 a4 0 0 fd05 665361 1 0 0 1573375831 1573375737 1573375737 4096 /opt/write/9996 97792 192 81 a4 0 0 fd05 665357 1 0 0 1573375828 1573375737 1573375737 4096 /opt/write/9997 97792 192 81 a4 0 0 fd05 665358 1 0 0 1573375830 1573375737 1573375737 4096 /opt/write/9998 97792 192 81 a4 0 0 fd05 665359 1 0 0 1573375831 1573375737 1573375737 4096 /opt/write/9999 97792 192 81 a4 0 0 fd05 665360 1 0 0 1573375838 1573375737 1573375737 4096 需求:/opt/write/数字,根据数字排序 命令: sort -t "/" -n -k4 stat.log 注:以/为分隔,按数字进行排序,指定的排序列是4 sort: 1. -t 指定文本分隔符 2. -k 指定排序列 3. -n 按数字进行排序 4. -r 翻转排序结果 5. -g 科学记数法方式比较6. -o 设置输出文件,与“>”相比可以设置输出到原文件,“>”会清空原文件7. -u 删除相同行
双向输出重定向 输出重定向会将输出内容重定向到文件中,而 tee 不仅能够完成这个功能,还能保留屏幕上的输出。也就是说,使用 tee 指令,一个输出会同时传送到文件和屏幕上。
字符转换指令 tr 用来删除一行中的字符,或者对字符进行替换。
1 2 $ tr [-ds] SET1 ... -d : 删除行中 SET1 这个字符串
示例,将 last 输出的信息所有小写转换为大写。
1 $ last | tr '[a-z]' '[A-Z]'
col 将 tab 字符转为空格字符。
1 2 $ col [-xb] -x : 将 tab 键转换成对等的空格键
expand 将 tab 转换一定数量的空格,默认是 8 个。
1 2 $ expand [-t] file -t :tab 转为空格的数量
join 将有相同数据的那一行合并在一起。
1 2 3 4 5 $ join [-ti12] file1 file2 -t :分隔符,默认为空格 -i :忽略大小写的差异 -1 :第一个文件所用的比较字段 -2 :第二个文件所用的比较字段
paste 直接将两行粘贴在一起。
1 2 $ paste [-d] file1 file2 -d :分隔符,默认为 tab
分区指令 split 将一个文件划分成多个文件。
1 2 3 4 $ split [-bl] file PREFIX -b :以大小来进行分区,可加单位,例如 b, k, m 等 -l :以行数来进行分区。 - PREFIX :分区文件的前导名称
九、正则表达式 通配符 1 2 3 4 5 6 *:匹配0 或多个字符 ?:匹配随意一个字符 [list]:匹配list中的随意单一字符 [!list]:匹配非list中的随意单一字符 [a1-a3]:匹配a1和a3之间的随意一个字符。如0 -9 ,a-z {string 1,string 2,string 3...}:匹配string 1,或string 2或……当中的一个字符串
grep g/re/p(globally search a regular expression and print),使用正则表示式进行全局查找并打印。
1 2 3 4 5 6 7 8 9 10 11 12 13 $ grep [-acinv] [--color=auto] 搜寻字符串 filename -c : 统计匹配到行的个数 -i : 忽略大小写 -n : 输出行号 -v : 反向选择,也就是显示出没有 搜寻字符串 内容的那一行 -w : 完全匹配 grep -w "cao" --color=auto :找到的关键字加颜色显示 -A -B -C 后面都跟阿拉伯数字 -A是显示匹配后和它后面的n行。 -B是显示匹配行和它前面的n行。 -C是匹配行和它前后各n行。 总体来说,-C覆盖面最大。用它保险些。哈哈。这3 个开关都是关于匹配行的上下文的(context)。
示例:把含有 the 字符串的行提取出来(注意默认会有 –color=auto 选项,因此以下内容在 Linux 中有颜色显示 the 字符串)
1 2 3 4 5 6 $ grep -n 'the ' regular_express.txt 8 :I can't finish the test.12 :the symbol '*' is represented as start.15 :You are the best is mean you are the no. 1 .16 :The world Happy is the same with "glad" .18 :google is the best tools for search keyword
示例:正则表达式 a{m,n} 用来匹配字符 a m~n 次,这里需要将 { 和 } 进行转义,因为它们在 shell 是有特殊意义的。
1 $ grep -n 'a\{2,5\}' regular_express.txt
示例:查找当前目录下包含关键字“checknetiflinkstat”的所有文件,并列出行号。
1 grep -nr "checknetiflinkstat" /home/ zxcdn/ottcache/ nginx/lua
报错Binary file (standard input) matches:
1 2 解决: cat mt.output-20180807 |grep -a l129093
printf 用于格式化输出。它不属于管道命令,在给 printf 传数据时需要使用 $( ) 形式。
1 2 3 4 $ printf '%10 s %5 i %5 i %5 i %8.2 f \n' $(cat printf.txt) DmTsai 80 60 92 77.33 VBird 75 55 80 70.00 Ken 60 90 70 73.33
tr: 1 2 去除字母 cat file | tr -d "a-zA-Z" >new_file
sed 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 https: //www.cnblogs.com/fiberhome /p/ 6898786 .html在每行的头添加字符,比如"HEAD" ,命令如下: [root@localhost ~] [root@localhost ~] HEADnull HEAD000011112222 HEAD HEADtest sed -ri 's/(20230907..)/\110/g' sed -ri 's/(20230907..)/\110/' sed -i '/hello/i\\555555' testfile sed -i '/hello/a\\66666' testfile sed -i 's/xxx/12344/21/' sed -i '1i include /etc/cinder/volumes/*' /etc/tgt/targets .conf 其中i表示插入,而且是添加到当前行的上一行;而a是添加到当前行的后一行。 注意:在sed中没有第0行之说。 显示文件X行到Y行的内容: 删除文件最后一行: sed '$d' 对第十八行进行注释:sed '18s/^/#/' /etc/fstab sed中支持变量的处理方法 1 .eval sed ’s/$a /$b /’ filename2 .sed "s/$a/$b/" filename3 .sed ’s/’$a ’/’$b ’/’ filename 4 .sed s/$a /$b / filename第一种eval sed -i 's!gcomm://!gcomm://$IP_2!g' /etc/my.cnf.d/server.cnf 第二种sed -i "s/localhost-IP/$IP_2/g" /etc/my.cnf.d/server.cnf sed删除含有某个字符的行 readzone1=12345 sed -i "/$readzone1/d" zone1.log zone2.log zone3.log linux 删除文件里的标点符号 sed -i 's /[,."]//g filename 删除空行: sed ' /^\s*$/ d' 注:d代表删除该行 行尾追加字符: sed ' s/$/ ABC/' file1 行首: sed ' s/^/xxx/ ' filename >output:^符号代表行首 awk NF 注:NF代表当前行的字段数,空行的话字段数为0,被awk解释为假,因此不进行输出。 Sed 删除包含某些字符串的行 sed -i ' /关键字符/d' 文件名 ------------------------------------------------------------------------- https://www.cnblogs.com/Berryxiong/p/6232283.html sed ' s/[ ][ ]*/,/g ' 1.txt 脚本说明: s代表替换指令; 每个[ ]都包含有一个空格; *号代表0个或多个; g代表替换每行的所有匹配; ------------------------------------------------------------------------- linux 如何截取一段时间内log日志 sed -n ' /2020-02 -12 08 : 50 /,/2020-02-12 09:00/ 'p server.INFO shell替换一个或多个空格为逗号 sed ' s/[ ][ ]*/,/g ' 1.txt 脚本说明: s代表替换指令; 每个[ ]都包含有一个空格; *号代表0个或多个; g代表替换每行的所有匹配;
awk 是由 Alfred Aho,Peter Weinberger 和 Brian Kernighan 创造,awk 这个名字就是这三个创始人名字的首字母。
awk 每次处理一行,处理的最小单位是字段,每个字段的命名方式为:$n,n 为字段号,从 1 开始,$0 表示一整行。
示例:取出最近五个登录用户的用户名和 IP。首先用 last -n 5 取出用最近五个登录用户的所有信息,可以看到用户名和 IP 分别在第 1 列和第 3 列,我们用 $1 和 $3 就能取出这两个字段,然后用 print 进行打印。
1 2 3 4 5 6 7 8 9 10 11 12 $ last -n 5 dmtsai pts/0 192.168 .1 .100 Tue Jul 14 17 :32 still logged in dmtsai pts/0 192.168 .1 .100 Thu Jul 9 23 :36 - 02 :58 (03 :22 ) dmtsai pts/0 192.168 .1 .100 Thu Jul 9 17 :23 - 23 :36 (06 :12 ) dmtsai pts/0 192.168 .1 .100 Thu Jul 9 08 :02 - 08 :17 (00 :14 ) dmtsai tty1 Fri May 29 11 :55 - 12 :11 (00 :15 ) $ last -n 5 | awk '{print $1 "\t" $3}' dmtsai 192.168 .1 .100 dmtsai 192.168 .1 .100 dmtsai 192.168 .1 .100 dmtsai 192.168 .1 .100 dmtsai Fri
可以根据字段的某些条件进行匹配,例如匹配字段小于某个值的那一行数据。
1 $ awk '条件类型 1 {动作 1 } 条件类型 2 {动作 2 } ...' filename
示例:/etc/passwd 文件第三个字段为 UID,对 UID 小于 10 的数据进行处理。
1 2 3 4 $ cat /etc/passwd | awk 'BEGIN {FS=":" } $3 < 10 {print $1 "\t " $3 }' root 0 bin 1 daemon 2
awk 变量:
变量名称
代表意义
NF
每一行拥有的字段总数
NR
目前所处理的是第几行数据
FS
目前的分隔字符,默认是空格键
示例:显示正在处理的行号以及每一行有多少字段
1 2 3 4 5 6 $ last -n 5 | awk '{print $1 "\t lines: " NR "\t columns: " NF}' dmtsai line s: 1 columns: 10 dmtsai line s: 2 columns: 10 dmtsai line s: 3 columns: 10 dmtsai line s: 4 columns: 10 dmtsai line s: 5 columns: 9
awk中执行Linux命令的两种方式
在使用awk处理内容时,有时会按行执行Linux命令,下面介绍两种执行Linux命令方式。
方式一 :用system():
1 2 [root@localhost shell_script] [root@localhost shell_script]
test.log文件:
1 2 3 4 5 [root@localhost shell_script] pwd ls which sh[root@localhost shell_script]
按文件行作为输入执行:
$0 表示一行数据
1 2 3 4 5 6 7 8 9 10 11 [root@localhost shell_script] 执行命令:pwd /root/shell_script 执行命令:ls awk_system.sh test.log 执行命令:which sh /usr/bin/sh [root@localhost shell_script]
拼接命令:
1 2 3 [root@localhost shell_script] var hq_str_sh601236="红塔证券,19.930,20.320,19.150,19.930,18.710,19.150,19.160,41190044,791608359.000,198000,19.150,53300,19.140,60100,19.130,74200,19.120,24100,19.110,50500,19.160,28500,19.170,18300,19.180,15500,19.190,59300,19.200,2020-06-29,15:00:00,00," ; [root@localhost shell_script]
方式二 :借助|和sh命令:
1 2 3 4 5 6 7 [root@localhost shell_script] /root/shell_script [root@localhost shell_script] /root/shell_script awk_system.sh test.log /usr/bin/sh [root@localhost shell_script]
print
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [root@localhost shell_script] /root/shell_script [root@localhost shell_script] [root@localhost shell_script] /root/shell_script [root@localhost shell_script] [root@localhost shell_script] 执行命令:pwd 执行命令:ls 执行命令:which sh /root/shell_script awk_system.sh test.log /usr/bin/sh [root@localhost shell_script]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 https: https: http: http: IF 语句必须用在{}中,且比较内容用()扩起来 awk -F: '{if ($1 ~/mail/) print $1} ' /etc/passwd awk -F: '{if ($1 ~/mail/) {print $1} }' /etc/passwd awk -F: '{if ($1 ~/mail/) {print $1} else {print $2} }' /etc/passwd 条件表达式 == != > >= awk -F":" '$1 =="mysql" {print $3} ' /etc/passwd awk -F":" '{if ($1 =="mysql" ) print $3} ' /etc/passwd awk -F":" '$1 !="mysql" {print $3} ' /etc/passwd awk -F":" '$3 >1000{print $3} ' /etc/passwd awk -F":" '$3 >=100{print $3} ' /etc/passwd awk -F":" '$3 <1{print $3} ' /etc/passwd awk -F":" '$3 <=1{print $3} ' /etc/passwd awk判断某字段为空 more aaa.txt | awk -F '|' '$11 ~/^$/{print $0} '#在每一行插入字符 1. 如何在一个文本文件中的每一行头插入一个字符 awk '{print "X" $0} ' urfile 2. 如何在一个文本文件中的每一行尾插入一个字符 awk '{print $0 "X" }' urfile 3. 如何在一个文本文件中的每一行的指定列插入一串字符 awk '$O =$O " X" ' urfile awk匹配指定的字符串并打印该字符串所在的列 简书 df|awk '/%/ {for (i=1;i<=NF;i++) if ($i ~/%/)print $i }' 【-----awk之行与列的count Chinaunix----】 1) 每行字段数 awk '{print NF}' file 5 1 4 2 4 2) 最大字段数 awk '{max=max 5 3) 总共字段个数 awk '{x+=NF}END{print x}' file 16 4) 所有字段的总和 awk '{for (i=1;i<=NF;i++)x+=$i} END{print x}' file 280 5) 各行的总和 awk '{x=0;for (i=1;i<=NF;i++){x+=$i} ;print x}' file 60 15 70 41 94 6) 各列的总和 awk '{for (i=1;i<=NF;i++)a[i]+=$i} END{l =length (a);for (j=1;j<=l ;j++) printf a[j]" " ;printf "\n" }' file 83 72 54 57 14 7) 行列交换 awk '{for (i=1;i<=NF;i++)a[NR,i]=$i ;x=x10 15 16 20 22 11 17 21 23 12 18 24 13 19 25 14 或者以空格补齐空白处 awk '{for (i=1;i<=NF;i++)a[NR,i]=$i ;x=x10 15 16 20 22 11 17 21 23 12 18 24 13 19 25 14 【----Shell 获取字符串长度的多种方法总结---】 方法如下: 【方法一】:利用${#str}来获取字符串的长度 str="ABCDEF" echo ${#str} 【方法二】:利用awk的length方法 str="ABCDEF" echo ${str} |awk '{print length ($0 )}' 备注: 1) 最好用{}来放置变量 2) 也可以用length ($0 )来统计文件中每行的长度 awk '{print length ($0 )}' /etc/passwd awk '{print length ($NF )}' /etc/passwd #计算最后一个字段的长度 【方法三】:利用awk的NF项来获取字符串长度 str="ABCDEF" echo ${str} |awk -F"" '{print NF}' 备注: -F为分隔符,NF为域的个数,即单行字符串的长度 【方法四】:利用wc的-L 参数来获取字符串的长度 str="ABCDEF" echo ${str} |wc -L cat /etc/passwd |wc -L # 输出:82备注: -L 参数 1) 对多行文件来说,表示打印最长行的长度!82,表示/etc/passwd文件最长行的长度为82。 2) 对单行字符串而言,表示当前行字符串的长度! 【方法五】:利用wc的-l 参数,结合echo -n 参数 str="ABCDEF" echo -n ${str} |wc -c echo ${str} |wc -c 备注: 1) -c参数: 统计字符的个数 2) -n 参数: 去除"\n" 换行符,不去除的话,默认带换行符,字符个数就成了7 【方法六】:利用expr的length方法 str="ABCDEF" expr length ${str} 【方法七】:利用expr的$str : ".*" 技巧,变量带不带花括号无差别 str="ABCDEF" expr ${str} : ".*" 备注: .*代表任意字符,即用任意字符来匹配字符串,结果是匹配到6个,即字符串的长度为6 awk输出前最多ip地址: awk '{ip[$1 ]++} END {for (i in ip) print i,ip[i]}' /var /log /httpd/access_log 显示第一行和最后一行: awk 'NF==1;END{print }' 【-------awk去掉某字符串前面所有字符 vOFS-----】 比如: test 1aaaaatest 2 test 3 tesbbbbbtest test 4 每行去掉test 前面所有字符之后,输出: test 1test 2test 3test test 4处理: awk -F'test ' -vOFS="test" '{$1 ="" ;$1 =$1} 1' file awk '{match ($0 ,"test" );print substr ($0 ,RSTART)}' file 解析: 这两种处理方法都很好, 第一种是利用test 作为分隔符,然后把第一个字段赋值为空,也是就是第一个test 前面的字符。同时,输出的字段的分隔符还必须是test 字符串。 第二种方法的话首先查找到test 字符串的位置,然后这时候RSTART的变量的值就是test 的开始的位置,而后利用substr函数从此处开始到结束位置。 awk多个分隔符: 但是如果我想根据多个分隔符进行分割呢?一种办法是两次awk,但是我们可以一次告诉awk我们所有的分隔符,如-和|这两个,如 awk -F ‘[-|]’ ‘{print $3 ;}’ data 就这么简单,还有一个问题,如果我们想用[]作为分隔符怎么办?有办法,这样就行: awk -F ‘[][]’ ‘{print $3 ;}’ data 去重命令(去除重复行): awk '!a[$0 ]++' 42in.txt >42in-new.txt awk打印出每一列 [root@block-storage04 wxttest]# cat snbs.conf |grep gateway|sed 's/gateway= 10.242.180.211:8585 10.242.180.210:8585 10.242.180.209:8585 10.242.180.211:8585;10.242.180.210:8585;10.242.180.209:8585 第一列求和: awk -F ':' 'BEGIN{sum =0}{sum +=$1} END{print sum }' 删除第一列: awk '{$1 ="" ;print $0} ' text awk 求平均:awk '{sum +=$1} END {print "$k = " , sum /NR}' 每一行行首加上行号: awk '$0 =NR"," $0 ' ---------------------------------------------------------------- 单行、多行转换 #一行数据分割成多行 awk 'BEGIN{i=1}{gsub(/,/,",\n" );i++;print }' file .txt #每两行数据合并成一行(这个可以作为每两行合为一行使用) sed -n '{N ;s/\n / /p}' file .txt #指定几行数据合并成一行(此为10行) awk '{if (NR%10==0){print $0} else {printf"%s " ,$0} }' file .txt 或 cat file .txt | awk '{if (NR%10!=0)ORS=" " ;else ORS="\n" ;print }'#多行数据合并成一行 awk BEGIN{RS=EOF}'{gsub(/\n /," " );print }' file .txt 或 sed ':a ; N ;s/\n / / ; t a ; ' file .txt 或 cat file .txt | xargs或 cat file .txt | tr '\n ' ' '
1 2 3 4 5 6 7 8 9 tail -f test .log | grep "mode" | awk '{print $5} '命令 或者 tail -f test .log | awk '/mode/ {print $5} '的时候,如果test .log 中满足模式mode的数据很少,会发现即便是test .log 中新出现了满足mode的行,但是上面两个命令都没有任何输出。 原因在于grep和awk处于效率的考量,会缓存一批数据再输出到标准输出。 grep的--line -buffered选项和awk的fflush(stdout)命令可以使得grep和awk不缓存数据。如: tail -f test .log | grep --line -buffered "mode" | awk '{print $5} ' tail -f test .log | awk '/mode/ {print $5 ,$6 ; fflush(stdout)}''
十、进程管理 查看进程 1. ps 查看某个时间点的进程信息。
示例:查看自己的进程
示例:查看系统所有进程
示例:查看特定的进程
1 ## ps aux | grep threadx
2. pstree 查看进程树。
示例:查看所有进程树
3. top 实时显示进程信息。
示例:两秒钟刷新一次
4. netstat 查看占用端口的进程
示例:查看特定端口的进程
1 ## netstat -anp | grep port
进程状态
状态
说明
R
running or runnable (on run queue) 正在执行或者可执行,此时进程位于执行队列中。
D
uninterruptible sleep (usually I/O) 不可中断阻塞,通常为 IO 阻塞。
S
interruptible sleep (waiting for an event to complete) 可中断阻塞,此时进程正在等待某个事件完成。
Z
zombie (terminated but not reaped by its parent) 僵死,进程已经终止但是尚未被其父进程获取信息。
T
stopped (either by a job control signal or because it is being traced) 结束,进程既可以被作业控制信号结束,也可能是正在被追踪。
SIGCHLD 当一个子进程改变了它的状态时(停止运行,继续运行或者退出),有两件事会发生在父进程中:
得到 SIGCHLD 信号;
waitpid() 或者 wait() 调用会返回。
其中子进程发送的 SIGCHLD 信号包含了子进程的信息,比如进程 ID、进程状态、进程使用 CPU 的时间等。
在子进程退出时,它的进程描述符不会立即释放,这是为了让父进程得到子进程信息,父进程通过 wait() 和 waitpid() 来获得一个已经退出的子进程的信息。
wait()
父进程调用 wait() 会一直阻塞,直到收到一个子进程退出的 SIGCHLD 信号,之后 wait() 函数会销毁子进程并返回。
如果成功,返回被收集的子进程的进程 ID;如果调用进程没有子进程,调用就会失败,此时返回 -1,同时 errno 被置为 ECHILD。
参数 status 用来保存被收集的子进程退出时的一些状态,如果对这个子进程是如何死掉的毫不在意,只想把这个子进程消灭掉,可以设置这个参数为 NULL。
waitpid() 1 pid_t waitpid (pid_t pid, int *status, int options)
作用和 wait() 完全相同,但是多了两个可由用户控制的参数 pid 和 options。
pid 参数指示一个子进程的 ID,表示只关心这个子进程退出的 SIGCHLD 信号。如果 pid=-1 时,那么和 wait() 作用相同,都是关心所有子进程退出的 SIGCHLD 信号。
options 参数主要有 WNOHANG 和 WUNTRACED 两个选项,WNOHANG 可以使 waitpid() 调用变成非阻塞的,也就是说它会立即返回,父进程可以继续执行其它任务。
孤儿进程 一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。
孤儿进程将被 init 进程(进程号为 1)所收养,并由 init 进程对它们完成状态收集工作。
由于孤儿进程会被 init 进程收养,所以孤儿进程不会对系统造成危害。
僵尸进程 一个子进程的进程描述符在子进程退出时不会释放,只有当父进程通过 wait() 或 waitpid() 获取了子进程信息后才会释放。如果子进程退出,而父进程并没有调用 wait() 或 waitpid(),那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程。
僵尸进程通过 ps 命令显示出来的状态为 Z(zombie)。
系统所能使用的进程号是有限的,如果产生大量僵尸进程,将因为没有可用的进程号而导致系统不能产生新的进程。
要消灭系统中大量的僵尸进程,只需要将其父进程杀死,此时僵尸进程就会变成孤儿进程,从而被 init 进程所收养,这样 init 进程就会释放所有的僵尸进程所占有的资源,从而结束僵尸进程。
参考资料