欢迎光临
一直在努力

maven私有仓库–Redhat环境下搭建nexus

心生阅读(87)

一、基础环境

系统:Red Hat Enterprise Linux Server release 6.6

JDK:java version “1.7.0_65”

二、maven安装

2.1 软件版本

Apache Maven 3.5.2

下载地址:http://maven.apache.org/download.cgi

下载链接:http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.tar.gz

2.2  创建软件安装目录

mkdir /data

cd /data

wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.tar.gz

tar xzvf apache-maven-3.5.2-bin.tar.gz

2.3 添加环境变量

vi /etc/profile

末尾添加以下信息

export M2_HOME=/data/apache-maven-3.5.2
export PATH=$PATH:$M2_HOME/bin

source /etc/profile

2.4 测试

mvn -v

返回如上信息,说明maven安装完成。

三、nexus安装

3.1 软件版本

nexus-2.14.5-02

下载地址:https://www.sonatype.com/download-oss-sonatype

下载链接:https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.14.5-02-bundle.tar.gz

3.2 下载解压软件

cd /data

wget https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.14.5-02-bundle.tar.gz

tar xzvf nexus-2.14.5-02-bundle.tar.gz

3.3 软件配置

cd nexus-2.14.5-02

vim   conf/nexus.properties #编辑配置文件

application-port=8081
application-host=0.0.0.0
nexus-webapp=${bundleBasedir}/nexus
nexus-webapp-context-path=/nexus

application-port端口默认8081,可以不修改,根据自己情况来定

vim bin/nexus         #编辑启动文件

RUN_AS_USER=maven    #  启动用户根据自己情况,我这里使用的maven用户,也可以是root

其他可以使用默认配置

保存退出

3.4启动服务

bin/nexus start   #启动服务

3.5  web访问

http://ip:8081

点击右上角login,默认管理员账号密码:admin/amdin123

 

至此,安装结束

Linux运维常用工具汇总

心生阅读(72)

Bootstrapping:

Kickstart、Cobbler、rpmbuild/xen、kvm、lxc、 Openstack、 Cloudstack、Opennebula、Eucalyplus、RHEV

配置类工具:

Capistrano、Chef、puppet、func、salstack、Ansible、 rundeck、CFengine、Rudder

自动化构建和测试:

Ant、Maven、Selenium、PyUnit、QUnit、JMeter、Gradle、 PHPUnit

监控类工具:

Cacti、Nagios(Icinga)、Zabbix、基于时间监控前端Grafana、 Mtop、MRTG(网络流量监控图形工具)、Monit 、 Diamond+Graphite+Grafana

微服务平台:

OpenShift、Cloud Foundry、Kubernetes、Mesosphere

性能监控工具:

dstat(多类型资源统计)、atop(htop/top)、 nmon(类Unix系统性能监控)、slabtop(内核slab缓存信息)、 sar(性能监控和瓶颈检查)、sysdig(系统进程高级视图)、 tcpdump(网络抓包)、iftop(类似top的网络连接工具)、 iperf(网络性能工具)、smem)(高级内存报表工具)、 collectl(性能监控工具)、TCP优化监控工具tcpdive

免费APM工具:

mmtrix(见过的最全面的分析工具)、alibench、 JAVA性能监控pinpoint

进程监控:

mmonit、Supervisor、frigga、 StrongLoop Process Manager

日志系统:

Logstash、Scribe

绘图工具:

RRDtool、Gnuplot

流控系统:

Panabit、在线数据包分析工具Pcap Analyzer

安全检查:

chrootkit、rkhunter

PaaS:

Cloudify、Cloudfoundry、Openshift、 Deis (Docker、CoreOS、Atomic、ubuntu core/Snappy、 RancherOS)

Troubleshooting:

Sysdig 、Systemtap、Perf

服务发现:

SmartStack、etcd

持续集成:

Go、Jenkins、Gitlab、facebook代码审查工具phabricator、 spinnaker

APP CD:

fastlane

磁盘压测:

fio、iozone、IOMeter(win) Memcache   Mcrouter(scaling memcached) Redis   Dynomite、Twemproxy、codis/SSDB/Aerospike、 Redis Cluster

MySQL 监控:

mytop、orzdba、Percona-toolkit、Maatkit、innotop、 myawr、SQL级监控mysqlpcap、拓扑可视化工具

MySQL基准测试:

mysqlsla、sql-bench、Super Smack、 Percona’s TPCC-MYSQL Tool、sysbench

MySQL Proxy:

SOHU-DBProxy、Mycat、Altas、cobar、58同城Oceanus、 kingshard

MySQL逻辑备份工具:

mysqldump、mysqlhotcopy、mydumper、MySQLDumper 、 mk-parallel-dump/mk-parallel-restore

MySQL物理备份工具:

Xtrabackup、LVM Snapshot

MongoDB压测:

iibench&sysbench

脑补lsof(list opened files)命令使用详解

心生阅读(74)

lsof全名list opened files,也就是列举系统中已经被打开的文件。我们都知道,linux环境中,任何事物都是文件,
设备是文件,目录是文件,甚至sockets也是文件。所以,用好lsof命令,对日常的linux管理非常有帮助。

 

lsoflinux最常用的命令之一,通常的输出格式为:

 

引用
COMMAND     PID   USER   FD      TYPE     DEVICE     SIZE       NODE NAME

 

常见包括如下几个字段:更多的可见manual

1COMMAND
默认以9个字符长度显示的命令名称。可使用+c参数指定显示的宽度,若+c后跟的参数为零,则显示命令的全名
2
PID:进程的ID
3
PPID
父进程的IP号,默认不显示,当使用-R参数可打开。
4
PGID
进程组的ID编号,默认也不会显示,当使用-g参数时可打开。
5
USER
命令的执行UID或系统中登陆的用户名称。默认显示为用户名,当使用-l参数时,可显示UID
6
FD
是文件的File Descriptor number,或者如下的内容:
(这里很难翻译对应的意思,保留英文)

 

引用
cwd  current working directory;
Lnn  library references (AIX);
jld  jail directory (FreeBSD);
ltx  shared library text (code and data);
Mxx  hex memory-mapped type number xx.
m86  DOS Merge mapped file;
mem  memory-mapped file;
mmap memory-mapped device;
pd   parent directory;
rtd  root directory;
tr   kernel trace file (OpenBSD);
txt  program text (code and data);
v86  VP/ix mapped file;

 

 

文件的File Descriptor number显示模式有:

 

引用
r for read access;
w for write access;
u for read and write access;
N for a Solaris NFS lock of unknown type;
r for read lock on part of the file;
R for a read lock on the entire file;
w for a write lock on part of the file;
W for a write lock on the entire file;
u for a read and write lock of any length;
U for a lock of unknown type;
x for an SCO OpenServer Xenix lock on part  of the file;
X  for an SCO OpenServer Xenix lock on the entire file;
space if there is no lock.

 

 

7TYPE

引用
IPv4 IPv4
的包;
IPv6
使用IPv6格式的包,即使地址是IPv4的,也会显示为IPv6,而映射到IPv6的地址;
DIR
目录
LINK
链接文件

详情请看manual中更多的注释。

 

8DEVICE
使用character specialblock special表示的设备号
9
SIZE
文件的大小,如果不能用大小表示的,会留空。使用-s参数控制。
10
NODE
本地文件的node码,或者协议,如TCP
11
NAME
挂载点和文件的全路径(链接会被解析为实际路径),或者连接双方的地址和端口、状态等

 

常用示例:

 

1.显示开启文件/home/oracle/10.2.0/db_1/bin/tnslsnr的进程

 

[root@svr-db-test ~]# lsof /home/oracle/10.2.0/db_1/bin/tnslsnr
COMMAND  PID   USER  FD   TYPE DEVICE   SIZE     NODE NAME
tnslsnr 3520 oracle txt    REG  253,5 431062 11408866 /home/oracle/10.2.0/db_1/bin/tnslsnr

 

2.知道22端口现在运行什么程序

 

[root@svr-db-test ~]# lsof -i :22
COMMAND  PID USER   FD   TYPE  DEVICE SIZE NODE NAME
sshd    3101 root    3u  IPv6    8670       TCP *:ssh (LISTEN)
sshd    4545 root    3u  IPv6 4237972       TCP 203.aibo.com:ssh->win-avbmq9e8ka7.gdgg.local:nsjtp-ctrl (ESTABLISHED)

 

3.显示init进程现在打开的文件

 

[root@svr-db-test ~]# lsof -c init
COMMAND PID USER   FD   TYPE DEVICE    SIZE   NODE NAME
init      1 root  cwd    DIR  253,0    4096      2 /
init      1 root  rtd    DIR  253,0    4096      2 /
init      1 root  txt    REG  253,0   43496 524446 /sbin/init
init      1 root  mem    REG  253,0  130448 917826 /lib64/ld-2.5.so
init      1 root  mem    REG  253,0 1678480 917827 /lib64/libc-2.5.so
init      1 root  mem    REG  253,0   23520 917686 /lib64/libdl-2.5.so
init      1 root  mem    REG  253,0  247528 917844 /lib64/libsepol.so.1
init      1 root  mem    REG  253,0   95480 917845 /lib64/libselinux.so.1
init      1 root   10u  FIFO   0,16           2311 /dev/initctl

 

  1. 看进程号为1的进程打开了哪些文件

 

[root@svr-db-test ~]# lsof -p 1
COMMAND PID USER   FD   TYPE DEVICE    SIZE   NODE NAME
init      1 root  cwd    DIR  253,0    4096      2 /
init      1 root  rtd    DIR  253,0    4096      2 /
init      1 root  txt    REG  253,0   43496 524446 /sbin/init
init      1 root  mem    REG  253,0  130448 917826 /lib64/ld-2.5.so
init      1 root  mem    REG  253,0 1678480 917827 /lib64/libc-2.5.so
init      1 root  mem    REG  253,0   23520 917686 /lib64/libdl-2.5.so
init      1 root  mem    REG  253,0  247528 917844 /lib64/libsepol.so.1
init      1 root  mem    REG  253,0   95480 917845 /lib64/libselinux.so.1
init      1 root   10u  FIFO   0,16           2311 /dev/initctl

 

  1. 显示归属3520的进程情况

 

[root@svr-db-test ~]# lsof -g 3520
COMMAND  PID PGID   USER   FD   TYPE             DEVICE      SIZE     NODE NAME
tnslsnr 3520 3520 oracle  cwd    DIR              253,5      4096 11059201 /home/oracle
tnslsnr 3520 3520 oracle  rtd    DIR              253,0      4096        2 /
tnslsnr 3520 3520 oracle  txt    REG              253,5    431062 11408866 /home/oracle/10.2.0/db_1/bin/tnslsnr
tnslsnr 3520 3520 oracle  mem    REG              253,0    130448   917826 /lib64/ld-2.5.so
tnslsnr 3520 3520 oracle  mem    REG              253,0   1678480   917827 /lib64/libc-2.5.so
tnslsnr 3520 3520 oracle  mem    REG              253,0     23520   917686 /lib64/libdl-2.5.so
tnslsnr 3520 3520 oracle  mem    REG              253,0    615136   917834 /lib64/libm-2.5.so
tnslsnr 3520 3520 oracle  mem    REG              253,0    141208   917829 /lib64/libpthread-2.5.so
tnslsnr 3520 3520 oracle  mem    REG              253,0    109824   917839 /lib64/libnsl-2.5.so
tnslsnr 3520 3520 oracle  mem    REG              253,5  20706622 11405436 /home/oracle/10.2.0/db_1/lib/libclntsh.so.10.1
tnslsnr 3520 3520 oracle  mem    REG              253,5   3803097 11410641 /home/oracle/10.2.0/db_1/lib/libnnz10.so
tnslsnr 3520 3520 oracle  mem    REG              253,5     83493 11407251 /home/oracle/10.2.0/db_1/lib/libons.so
tnslsnr 3520 3520 oracle  mem    REG              253,0     53880   917532 /lib64/libnss_files-2.5.so
tnslsnr 3520 3520 oracle  mem    REG              253,5      8545 11407615 /home/oracle/10.2.0/db_1/lib/libskgxn2.so
tnslsnr 3520 3520 oracle  mem    REG              253,5    513705 11410332 /home/oracle/10.2.0/db_1/lib/libocrutl10.so
tnslsnr 3520 3520 oracle  mem    REG              253,5    636161 11410330 /home/oracle/10.2.0/db_1/lib/libocr10.so
tnslsnr 3520 3520 oracle  mem    REG              253,5    657825 11410331 /home/oracle/10.2.0/db_1/lib/libocrb10.so
tnslsnr 3520 3520 oracle  mem    REG              253,5   1745769 11410365 /home/oracle/10.2.0/db_1/lib/libhasgen10.so
tnslsnr 3520 3520 oracle  mem    REG              253,5     61985 11410366 /home/oracle/10.2.0/db_1/lib/libclsra10.so
tnslsnr 3520 3520 oracle    0u   CHR                1,3               2553 /dev/null
tnslsnr 3520 3520 oracle    1u   CHR                1,3               2553 /dev/null
tnslsnr 3520 3520 oracle    2u   CHR                1,3               2553 /dev/null
tnslsnr 3520 3520 oracle    3w   REG              253,5 318853012 11633459 /home/oracle/10.2.0/db_1/network/log/listener.log
tnslsnr 3520 3520 oracle    4r  FIFO                0,6              15661 pipe
tnslsnr 3520 3520 oracle    5r   REG              253,5     11776 11410579 /home/oracle/10.2.0/db_1/network/mesg/nlus.msb
tnslsnr 3520 3520 oracle    6r   REG              253,5     46592 11407160 /home/oracle/10.2.0/db_1/network/mesg/tnsus.msb
tnslsnr 3520 3520 oracle    7w  FIFO                0,6              15662 pipe
tnslsnr 3520 3520 oracle    8u  IPv4              15665                TCP 203.aibo.com:ncube-lm (LISTEN)
tnslsnr 3520 3520 oracle    9u  unix 0xffff81021b7d6980              15666 /var/tmp/.oracle/s#3520.1
tnslsnr 3520 3520 oracle   10u  unix 0xffff81021b7d66c0              15668 /var/tmp/.oracle/s#3520.2


6.
依照文件夹/home/oracle来搜寻,但不会打开子目录,用来显示目录下被进程开启的文件

 

[root@svr-db-test ~]# lsof +d /home/oracle
COMMAND  PID   USER   FD   TYPE DEVICE SIZE     NODE NAME
tnslsnr 3520 oracle  cwd    DIR  253,5 4096 11059201 /home/oracle

 

  1. 打开/home/oracle文件夹以及其子目录搜寻,用来显示目录下被进程开启的文件

 

[root@svr-db-test ~]# lsof +D /home/oracle


显示内容太多了,不显示了


  1. lsof -i
    用以显示符合条件的进程情况

 

语法: lsof -i[46] [protocol][@hostname|hostaddr][:service|port]

 

46 –> IPv4 or IPv6

protocol –> TCP or UDP

hostname –> Internet host name

hostaddr –> IPv4位置

service –> /etc/service中的 service name (可以不只一个)

port –> 端口号 (可以不只一个)

 

例:


[root@svr-db-test ~]# lsof -i tcp@192.168.2.245:1521 -n
COMMAND   PID   USER   FD   TYPE  DEVICE SIZE NODE NAME
oracle  15633 oracle   16u  IPv4 4069605       TCP 192.168.2.203:31580->192.168.2.245:ncube-lm (ESTABLISHED)

 

 

[root@svr-db-test ~]# lsof -i tcp@192.168.2.245:1521
COMMAND   PID   USER   FD   TYPE  DEVICE SIZE NODE NAME
oracle  15633 oracle   16u  IPv4 4069605       TCP 203.aibo.com:31580->192.168.2.245:ncube-lm (ESTABLISHED)

 

lsof -n 不将IP转换为hostname,缺省是不加上-n参数

 

  1. 显示某用户的已经打开的文件(或该用户执行程序已经打开的文件)

 

[root@svr-db-test ~]# lsof -u oracle

[root@svr-db-test ~]# lsof -u 0


  1. 仅打印进程,方便shell脚本调用

[root@svr-db-test ~]# lsof -tc sshd
3101
4545

df空间占用已满,但du查看home目录空间占用却很少

心生阅读(85)

一,背景

一大早研发过来报错,home目录之前分配10G空间,使用率100%,自己先尝试了扩容到50G,今天早上来了发现又100%了。。。

os:Red Hat Enterprise Linux Server release 6.6 (Santiago)

二,问题检测

登录问题服务器,执行命令  df -h,发现/home目录已占满,但是进入home,执行du -s -h发现只使用了1.4G的空间

初步怀疑是删除文件未释放导致的,执行命令 lsof |grep deleted

发现tomcat下的日志文件占用过大。。。。应该是开发人员删除了日志文件,但并未重启服务导致的。

三,解决问题

由于是测试环境,所以直接kill掉了服务,再次查看,空间已释放,目录使用率已恢复正常。

四,小结

脑补一下df du lsof

df命令使用的是statfs这个系统调用,直接读取分区的超级块信息获取分区使用情况。它的数据是基于分区元数据的,所以只能针对整个分区。由于df直接读取超级块,所以运行速度不受文件多少影响。

du命令会对待统计文件逐个调用fstat这个系统调用,获取文件大小。它的数据是基于文件获取的,所以有很大的灵活性,不一定非要针对一个分区,可以跨越多个分区操作。如果针对的目录中文件很多,du速度就会很慢了。

lsof全名list opened files,也就是列举系统中已经被打开的文件。我们都知道,linux环境中,任何事物都是文件,设备是文件,目录是文件,甚至sockets也是文件。所以,用好lsof命令,对日常的linux管理非常有帮助。

lsof详解见另外一篇文章

脑补lsof(list opened files)命令使用详解

IBM AIX系统硬件信息查看命令

心生阅读(84)

上篇文章写了AIX目录占用已满的处理,接下来脑补一下AIX相关命令

查看IBM AIX系统的主机型号、序列号、CPU、内存、硬盘、网卡、网卡物理插槽位置信息、是否配置以太网通道、网卡链路状态、当前网络速率、HBA卡、HBA卡物理插槽位置信息、HBA卡WWN、HBA卡支持速率、HBA卡当前速率、VG、PV、LV信息、该主机当前由哪台HMC管理、配置了多少磁带机驱动器tape driver等信息,可以通过一段脚本收集全部信息。                                                                        

一、查看型号、序列号、CPU、内存、HMC
型号:
#uname -M
IBM,8204-E8A
序列号:
#uname -u
IBM,0206*****
CPU数量
#lsdev -Cc processor
proc0   Available  00-00  Processor
proc2   Available  00-02  Processor
proc4   Available  00-04  Processor
proc6   Available  00-06  Processor
proc8   Available  00-08  Processor
proc10 Available  00-10  Processor
proc12 Available  00-12  Processor
proc14 Available  00-14  Processor

CPU主频
#lsattr -El proc0
frequency  4204000000       Processor Speed False
smt_enabled     true              Processor SMT enabled False
smt_threads       2                  Processor SMT threads False
state               enable             Processor state   False
type   PowerPC_POWER6    Processor type  False
查看CPU是否64位
#prtconf -c
CPU Type: 64-bit
内存信息:
#lsattr -El mem0
ent_mem_cap I/O     memory entitlement in Kbytes False
goodsize       63744    Amount of usable physical memory in Mbytes False
mem_exp_factor      Memory expansion factor False
size     63744              Total amount of physical memory in Mbytes False
var_mem_weight     Variable memory capacity weight False

查看该机当前由哪台HMC管理
#lsrsrc IBM.ManagementServer
Resource Persistent Attributes for IBM.ManagementServer
resource 1:
Name= “123.123.123.9”
Hostname= “123.123.123.9”
ManagerType= “HMC”
LocalHostname= “123.123.234.132”
ClusterTM= “9078-160”
ClusterSNum= “”
ActivePeerDomain = “”
NodeNameList= {“testdb1”}
型号、序列号、内存统一信息:
#lsattr -El sys0
fwversion IBM,EL350_085         Firmware version and revision levels                  False
modelname IBM,8204-E8A       Machine name                                                         False
realmem    65273856                  Amount of usable physical memory in Kbytes  False
systemid    IBM,0206*****        Hardware system identifier                                   False
二、查看磁盘信息:
#lspv
hdisk0 00077dd7807b5c17 rootvg active
hdisk1 000248cf0009518e rootvg active
hdisk2 00077dd7dac721c0 datavg active
hdisk3 00cc46ae008cfc98 datavg active

#lspath
Enabled hdisk0 scsi0
Enabled hdisk2 scsi0
Enabled hdisk3 scsi0
列出所有磁盘设备
#lsdev -Cc disk
hdisk0 Available 03-08-00-3,0 16 Bit LVD SCSI Disk Drive
hdisk1 Available 03-08-00-4,0 Other SCSI Disk Drive
hdisk2 Available 03-08-00-5,0 16 Bit LVD SCSI Disk Drive
hdisk3 Available 03-08-00-8,0 16 Bit LVD SCSI Disk Drive
查看磁盘容量
#bootinfo -s hdisk0
70006
查看磁盘属性
#lsattr -El hdisk0
reserve_policy   no_reserve   Reserve Policy            True
size_in_mb         146800          Size in Megabytes     False
查看磁盘物理插槽信息
#lscfg -vpl hdisk0
hdisk0 U787B.001.DNWFYCX-P1-T14-L3-L0 16 Bit LVD SCSI Disk Drive (73400 MB)


以上命令适用于现场查看,需要查看哪些硬盘,就执行几条命令,但是当需要用户帮忙采集信息,而系统磁盘数量未知的情况下就难以胜任了,以下脚本列出本机所有磁盘信息并对每个磁盘执行bootinfo -s查看磁盘容量,执行lsattr -El查看磁盘属性、执行lscfg -vpl查看磁盘物理插槽、lspv查看磁盘pv信息等。

  1. echo “#lsdev -Cc disk”
  2. lsdev -Cc disk
  3. for i in `lsdev -Cc disk|awk ‘{print $1}’`;
  4. do
  5. echo “nInformation about “$i “n#bootinfo -s” $i
  6. bootinfo -s $i
  7. echo “n#lsattr -El” $i
  8. lsattr -El $i
  9. echo “n#lscfg -vpl ” $i
  10. lscfg -vpl $i
  11. echo “n#lspv ” $i
  12. lspv $i
  13. done

IBM之AIX服务器ROOT或根目录使用已满,占用100%

心生阅读(86)

一、背景介绍

公司一台老IBM服务器,来公司两年了从未动过,只知道有这么一台服务器存在着。

二、突来的问题

研发部突

然报来错误,说磁盘使用已满,命令无法使用了,报错ksh: There is not enough space in the file system.

三、解决

一脸懵逼的看着这台AIX,尝试输入几个命令,发现和linux的不太一样。。。想起了《我们不一样》。。

言归正传,先考虑增加容量,查看一下磁盘分配并不是太多,应该还是有空间的,先给根目录增加512M

chfs -a size=+512M /

再次查看,根目录已有空间,继续给var目录增加空间

chfs -a size=+512M /var

至此,输入命令已不再报ksh: There is not enough space in the file system.

接下来在细究AIX详细命令及使用

linux面试题总结–需要扎实的基础

心生阅读(63)

1、Linux挂载Winodws共享文件夹

2、查看http的并发请求数及其TCP连接状态:

3、用tcpdump嗅探80端口的访问看看谁最高

4、统计/var/log/下文件个数

5、查看当前系统每IP连接数

6、shell下32位随机密码生成

7、统计出apache的access.log中访问量最多的5个IP

8、如何查看二进制文件的内容

9、ps aux 中VSZ代表什么意思 RSS代表什么

10、检测并修复/dev/hda5

11、Linux开机启动顺序

12、符号链接和硬链接的区别

13、保存当前磁盘分区的分区表

15、手动安装grub

16、改内核参数

17、在1-39内取随机数

18、限定apache每秒钟连接数为1,峰值为3

19、FTP主动与被动模式

20、显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行;

21、显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行;

22、怎么把自己写的脚本添加到服务里面,即可以使用service命令来调用

23、写一个脚本,实现批量添加20个用户,用户名为user1-20,密码为user后面跟5个随机字符

24、写一个脚本,实现判断192.168.1.0/24网络里,当前在线的IP有哪些,能ping通则认为在线

25、写一个脚本,判断一个指定的脚本是否是语法错误;如果有错误,则提醒用户键入Q或者q无视错误并退出其它任何键可以通过vim打开这个指定的脚本;

26、写一个脚本:
1、创建一个函数,能接受两个参数:
1)第一个参数为URL,即可下载的文件;第二个参数为目录,即下载后保存的位置;
2)如果用户给的目录不存在,则提示用户是否创建;如果创建就继续执行,否则,函数返回一个51的错误值给调用脚本;
3)如果给的目录存在,则下载文件;下载命令执行结束后测试文件下载成功与否;如果成功,则返回0给调用脚本,否则,返回52给调用脚本;

27、写一个脚本:
1、创建一个函数,可以接受一个磁盘设备路径(如/dev/sdb)作为参数;在真正开始后面步骤之前提醒用户有危险,并让用户选择是否继续;
而后将此磁盘设备上的所有分区清空(提示,使用命令dd if=/dev/zero of=/dev/sdb bs=512 count=1实现,注意其中的设备路径不要写错了
;如果此步骤失败,返回67给主程序;
接着在此磁盘设备上创建两个主分区,一个大小为100M,一个大小为1G;如果此步骤失败,返回68给主程序;
格式化此两分区,文件系统类型为ext3;如果此步骤失败,返回69给主程序;
如果上述过程都正常,返回0给主程序;
2、调用此函数;并通过接收函数执行的返回值来判断其执行情况,并将信息显示出来;

Linux LVM常用分区之VG扩容、LV扩容、LV缩减、LVM快照的基础操作

心生阅读(195)

一、简介
LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现,于1998年发布到Linux社区中,它允许你在Linux系统上用简单的命令行管理一个完整的逻辑卷管理环境。


二、版本
LVM1 最初的LVM与1998年发布,只在Linux内核2.4版本上可用,它提供最基本的逻辑卷管理。
LVM2 LVM-1的更新版本,在Linux内核2.6中才可用,它在标准的LVM-1功能外还提供了额外的功能。
查看:(测试机CentOS 6.6 X86_64)

01
02
03
04
05
06
07
08
09
10
[root@ZhongH100 ~]# rpm -qa | grep lvm
mesa-private-llvm-3.4-3.el6.x86_64
lvm2-libs-2.02.111-2.el6_6.2.x86_64
lvm2-2.02.111-2.el6_6.2.x86_64
[root@ZhongH100 ~]# cat /etc/centos-release
CentOS release 6.6 (Final)
[root@ZhongH100 ~]# uname -a
Linux ZhongH100.wxjr.com.cn 2.6.32-504.16.2.el6.centos.plus.x86_64 #1 SMP Wed Apr 22 00:59:31 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[root@ZhongH100 ~]# getconf LONG_BIT
64

Linux LVM分区之VG扩容、LV扩容、LV缩减、LVM快照


三、LVM 模块
Physical volume (PV)、Volume group (VG)、Logical volume(LV)、 Physical extent (PE),下面我们用一个简单的图来说明下物理卷、卷组、逻辑卷他们之间的关系(此图只是个人理解,仅供参考)
LVM 详解Linux LVM分区之VG扩容、LV扩容、LV缩减、LVM快照
简而言之:
逻辑卷的创建,就是将多块硬盘创建物理卷,而将这些物理卷以逻辑的形式总成一个容器,然后从这个容器里面创建大小不同的分区文件,而这个容器就是所谓的逻辑卷,而从这个容器里创建大小不同的分区文件,这个分区文件就叫做逻辑卷。嘿嘿,你懂了吗? ^_^ ……


四、具体操作
1. 分区 (本实验环境使用的是一块新磁盘/dev/sdb)

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@ZhongH100 ~]# fdisk -l /dev/sd[a-z]
Disk /dev/sda: 64.4 GB, 64424509440 bytes
255 heads, 63 sectors/track, 7832 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0006c656
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              64        6591    52428800   8e  Linux LVM
Disk /dev/sdb: 64.4 GB, 64424509440 bytes
255 heads, 63 sectors/track, 7832 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
[root@ZhongH100 ~]#
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
[root@ZhongH100 ~]# fdisk /dev/sdb  #试用fdisk命令来管理磁盘分区
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xfb1f25cf.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').
Command (m for help): p                      #输入p来打印当前磁盘上的分区
Disk /dev/sdb: 64.4 GB, 64424509440 bytes
255 heads, 63 sectors/track, 7832 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xfb1f25cf
   Device Boot      Start         End      Blocks   Id  System
Command (m for help): n                      #输入n 新建分区
Command action
   e   extended
   p   primary partition (1-4)
p                                            #输入p 选择分区类型为主分区
Partition number (1-4): 1                    #输入1 选择为第一个主分区
First cylinder (1-7832, default 1):          #直接回车 选择分区起始块为1
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-7832, default 7832): +10G        #输入+10G 为新分区大小为10G
Command (m for help): n                      #输入n 在当前磁盘上再次新建一个分区
Command action
   e   extended
   p   primary partition (1-4)
p                                            #输入p 选择分区类型为主分区
Partition number (1-4): 2                    #输入2 选择为第二个主分区
First cylinder (1307-7832, default 1307):    #直接回车 选择分区起始块为1307
Using default value 1307
Last cylinder, +cylinders or +size{K,M,G} (1307-7832, default 7832): +10G      #输入+10G 为新分区大小为10G
Command (m for help): n                      #输入n 在当前磁盘上再次新建一个分区
Command action
   e   extended
   p   primary partition (1-4)
p                                            #输入p 选择分区类型为主分区
Partition number (1-4): 3                    #输入3 选择为第三个主分区
First cylinder (2613-7832, default 2613):    #直接回车 选择分区起始块为2613
Using default value 2613
Last cylinder, +cylinders or +size{K,M,G} (2613-7832, default 7832): +10G      #输入+10G 为新分区大小为10G
Command (m for help): p                      #输入p来打印当前磁盘上的分区
Disk /dev/sdb: 64.4 GB, 64424509440 bytes
255 heads, 63 sectors/track, 7832 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xfb1f25cf
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1306    10490413+  83  Linux
/dev/sdb2            1307        2612    10490445   83  Linux
/dev/sdb3            2613        3918    10490445   83  Linux
Command (m for help): t                      #输入t 来改变分区类型
Partition number (1-4): 1                    #输入1 来选择改变分区类型的分区号为1
Hex code (type L to list codes): 8e          #输入8e 改变分区类型为LVM
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): t                      #输入t 来改变分区类型
Partition number (1-4): 2                    #输入2 来选择改变分区类型的分区号为2
Hex code (type L to list codes): 8e          #输入8e 改变分区类型为LVM
Changed system type of partition 2 to 8e (Linux LVM)
Command (m for help): t                      #输入t 来改变分区类型
Partition number (1-4): 3                    #输入3 来选择改变分区类型的分区号为3
Hex code (type L to list codes): 8e          #输入8e 改变分区类型为LVM
Changed system type of partition 3 to 8e (Linux LVM)
Command (m for help): p                      #输入p来打印当前磁盘上的分区
Disk /dev/sdb: 64.4 GB, 64424509440 bytes
255 heads, 63 sectors/track, 7832 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xfb1f25cf
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1306    10490413+  8e  Linux LVM
/dev/sdb2            1307        2612    10490445   8e  Linux LVM
/dev/sdb3            2613        3918    10490445   8e  Linux LVM
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@ZhongH100 ~]#

新分区完毕后我们需要让内核重新载入,如果执行一次不能载入所有分区那么就多执行几次,直至全部能识别到,我们的sdb上有3个分区,下面的命令已经显示全部识别了

1
2
3
4
5
6
7
[root@ZhongH100 ~]# partx -a /dev/sdb
BLKPG: Device or resource busy
error adding partition 1
BLKPG: Device or resource busy
error adding partition 2
BLKPG: Device or resource busy
error adding partition 3
2. 将物理分区与硬盘创建为物理卷(pvcreate)
01
02
03
04
05
06
07
08
09
10
11
[root@ZhongH100 ~]# pvcreate /dev/sdb1 /dev/sdb2 /dev/sdb3 #这是正常的命令写法 也可以使用下面那种扩展写法^C
[root@ZhongH100 ~]# pvcreate /dev/sdb{1,2,3}
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created
  Physical volume "/dev/sdb3" successfully created
[root@ZhongH100 ~]# pvs                                          #使用pvs来查看当前系统上所有的pv
  PV         VG       Fmt  Attr PSize  PFree
  /dev/sdb1           lvm2 ---  10.00g 10.00g
  /dev/sdb2           lvm2 ---  10.00g 10.00g
  /dev/sdb3           lvm2 ---  10.00g 10.00g
[root@ZhongH100 ~]#
3. 将物理卷(pv)创建为卷组(vgcreate),名为VGtest
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[root@ZhongH100 ~]# vgcreate VGtest /dev/sdb{1,2,3}
  Volume group "VGtest" successfully created
[root@ZhongH100 ~]# vgs
  VG       #PV #LV #SN Attr   VSize  VFree
  VGtest     3   0   0 wz--n- 30.00g 30.00g
[root@ZhongH100 ~]# vgdisplay
  --- Volume group ---
  VG Name               VGtest     #卷组名是VGtest
  System ID
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               30.00 GiB  #新的VG大小是30G 3个10G分区组成的
  PE Size               4.00 MiB   #物理盘的基本单位:默认4MB
  Total PE              7680
  Alloc PE / Size       0 / 0
  Free  PE / Size       7680 / 30.00 GiB
  VG UUID               W8fYiw-Zh46-53lr-qWuf-hqLR-Rqla-x1mFQH
[root@ZhongH100 ~]#
4. 在卷组里创建逻辑卷并格式化、挂载使用
01
02
03
04
05
06
07
08
09
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
[root@ZhongH100 ~]# lvcreate  -L 2G -n LVtest1 VGtest   #在名为VGtest的VG上创建一个名为LVtest1 大小为2G的逻辑卷
  Logical volume "LVtest1" created
[root@ZhongH100 ~]# lvs                                 #查看系统上的LV逻辑卷
  LV      VG       Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  LVtest1 VGtest   -wi-a-----  2.00g
[root@ZhongH100 ~]# mke2fs -t ext4 /dev/VGtest/LVtest1  #格式化新建的LVtest1逻辑卷为ext4格式
mke2fs 1.41.12 (17-May-2010)
文件系统标签=
操作系统:Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
131072 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912
正在写入inode表: 完成
Creating journal (16384 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
This filesystem will be automatically checked every 25 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@ZhongH100 ~]# mkdir /LVtest1                      #创建一个LVtest1的目录
[root@ZhongH100 ~]# mount /dev/VGtest/LVtest1 /LVtest1  #将/dev/VGtest/LVtest1这个逻辑卷挂载到 /LVtest1目录上
[root@ZhongH100 ~]# mount                               #查看挂载情况
/dev/mapper/vgzhongH-root on / type ext4 (rw,acl)
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/sda1 on /boot type ext4 (rw)
/dev/mapper/vgzhongH-data on /data type ext4 (rw,acl)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/mapper/VGtest-LVtest1 on /LVtest1 type ext4 (rw)   #挂载成功 分区格式是ext4 可读写
[root@ZhongH100 ~]# df -hP                              #查看系统上的分区情况
Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/vgzhongH-root    30G  3.3G   25G  12% /
tmpfs                       932M     0  932M   0% /dev/shm
/dev/sda1                   477M   34M  418M   8% /boot
/dev/mapper/vgzhongH-data   4.8G   10M  4.6G   1% /data
/dev/mapper/VGtest-LVtest1  2.0G  3.0M  1.9G   1% /LVtest1  #LVtest1逻辑卷分区正常
[root@ZhongH100 ~]#
5. 发现卷组pv空间不够,我们需要扩大卷组空间
 现在系统上新增了一块20G的硬盘/dev/sdc
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[root@ZhongH100 ~]# fdisk -l /dev/sd[a-z]
Disk /dev/sda: 64.4 GB, 64424509440 bytes
255 heads, 63 sectors/track, 7832 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0006c656
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              64        6591    52428800   8e  Linux LVM
Disk /dev/sdb: 64.4 GB, 64424509440 bytes
255 heads, 63 sectors/track, 7832 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xfb1f25cf
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1306    10490413+  8e  Linux LVM
/dev/sdb2            1307        2612    10490445   8e  Linux LVM
/dev/sdb3            2613        3918    10490445   8e  Linux LVM
Disk /dev/sdc: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
01
02
03
04
05
06
07
08
09
10
11
12
13
[root@ZhongH100 ~]# pvcreate /dev/sdc   #将新硬盘/sdc加入物理卷上
  Physical volume "/dev/sdc" successfully created
[root@ZhongH100 ~]# pvs                       #查看物理卷
  PV         VG       Fmt  Attr PSize  PFree
  /dev/sdb1  VGtest   lvm2 a--  10.00g  8.00g
  /dev/sdb2  VGtest   lvm2 a--  10.00g 10.00g
  /dev/sdb3  VGtest   lvm2 a--  10.00g 10.00g
  /dev/sdc            lvm2 ---  20.00g 20.00g
[root@ZhongH100 ~]# vgextend VGtest /dev/sdc  #扩展卷组
  Volume group "VGtest" successfully extended
[root@ZhongH100 ~]# vgs                       #查看卷组
  VG       #PV #LV #SN Attr   VSize  VFree
  VGtest     4   1   0 wz--n- 50.00g 48.00g   #从大小可以看出我们已经扩容成功
6. 扩展逻辑卷 (支持在线扩展)
 在线将/dev/VGtest/LVtest1 扩展到4G,并且要求数据可以正常访问
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[root@ZhongH100 ~]# cd /LVtest1/
[root@ZhongH100 LVtest1]# echo "this is a test for LVM" > lvtest #穿件个lvtest的文件并写入内容
[root@ZhongH100 LVtest1]# cat lvtest
this is a test for LVM
[root@ZhongH100 LVtest1]# lvs
  LV      VG       Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  LVtest1 VGtest   -wi-ao----  2.00g
[root@ZhongH100 LVtest1]# lvextend -L +2G /dev/VGtest/LVtest1
  Size of logical volume VGtest/LVtest1 changed from 2.00 GiB (512 extents) to 4.00 GiB (1024 extents).
  Logical volume LVtest1 successfully resized
[root@ZhongH100 LVtest1]# lvs
  LV      VG       Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  LVtest1 VGtest   -wi-ao----  4.00g                         #逻辑卷空间已经增加
[root@ZhongH100 LVtest1]# e2fsck -f /dev/VGtest/LVtest1
[root@ZhongH100 LVtest1]# resize2fs -p /dev/VGtest/LVtest1   #通过 resize2fs 将文件系统的容量确实添加
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/VGtest/LVtest1 is mounted on /LVtest1; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/VGtest/LVtest1 to 1048576 (4k) blocks.
The filesystem on /dev/VGtest/LVtest1 is now 1048576 blocks long.
[root@ZhongH100 LVtest1]# cat l
lost+found/ lvtest
[root@ZhongH100 LVtest1]# cat lvtest   #文件没有受损
this is a test for LVM
[root@ZhongH100 LVtest1]# df -hP
Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/vgzhongH-root    30G  3.3G   25G  12% /
tmpfs                       932M     0  932M   0% /dev/shm
/dev/sda1                   477M   34M  418M   8% /boot
/dev/mapper/vgzhongH-data   4.8G   10M  4.6G   1% /data
/dev/mapper/VGtest-LVtest1  3.9G  4.0M  3.7G   1% /LVtest1  #挂载的分区空间已经增加
[root@ZhongH100 LVtest1]#

如果是xfs文件系统话上面这种扩容方法就不行了,需要用下面的方法,
参考:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/xfsgrow.html
http://oss.sgi.com/archives/xfs/2001-05/msg03189.html

01
02
03
04
05
06
07
08
09
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
[root@www ~]# pvs
  PV         VG   Fmt  Attr PSize   PFree
  /dev/xvda2 LBVG lvm2 a--   14.51g     0
  /dev/xvda3 LBVG lvm2 a--  135.00g 85.01g
[root@www ~]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  LBVG   2   2   0 wz--n- 149.51g 85.01g
[root@www ~]# lvs
  LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root LBVG -wi-ao---- 62.00g
  swap LBVG -wi-ao----  2.50g
[root@www ~]# lvcreate -L 10G -n data LBVG
  Logical volume "data" created.
[root@www ~]# lvs
  LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  data LBVG -wi-a----- 10.00g
  root LBVG -wi-ao---- 62.00g
  swap LBVG -wi-ao----  2.50g
[root@www ~]# mkfs.xfs /dev/LBVG/data
meta-data=/dev/LBVG/data         isize=512    agcount=4, agsize=655360 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=0
data     =                       bsize=4096   blocks=2621440, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@www ~]# lvextend -L +5G /dev/LBVG/data
  Size of logical volume LBVG/data changed from 10.00 GiB (2560 extents) to 15.00 GiB (3840 extents).
  Logical volume data successfully resized.
[root@www ~]# lvs
  LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  data LBVG -wi-a----- 15.00g
  root LBVG -wi-ao---- 62.00g
  swap LBVG -wi-ao----  2.50g
[root@www ~]# e2fsck -f /dev/LBVG/data
e2fsck 1.42.13 (17-May-2015)
ext2fs_open2: Bad magic number in super-block
e2fsck: 超级块无效, trying backup blocks...
e2fsck: Bad magic number in super-block 当尝试打开 /dev/LBVG/data
The 超级块 could not be read or does not describe a valid ext2/ext3/ext4
文件系统.  If the 设备 is valid and it really contains an ext2/ext3/ext4
文件系统 (and not swap or ufs or something else), then the 超级块
is corrupt, and you might try running e2fsck with an alternate 超级块:
    e2fsck -b 8193 <设备>
 or
    e2fsck -b 32768 <设备>
[root@www ~]# mkdir /data
[root@www ~]# mount /dev/LBVG/data /data
[root@www ~]# df -hP|grep /data
文件系统               容量  已用  可用 已用% 挂载点
/dev/mapper/LBVG-data   10G   33M   10G    1% /data
[root@www ~]# xfs_growfs /dev/LBVG/data
meta-data=/dev/mapper/LBVG-data  isize=512    agcount=4, agsize=655360 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1 spinodes=0
data     =                       bsize=4096   blocks=2621440, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 2621440 to 3932160
[root@www ~]# df -hP|grep /data
文件系统               容量  已用  可用 已用% 挂载点
/dev/mapper/LBVG-data   15G   33M   15G    1% /data
[root@www ~]#
7. 缩减逻辑卷
 查看逻辑卷使用空间状况
 不能在线缩减,得先卸载 切记
 确保缩减后的空间大小依然能存储原有的所有数据
 在缩减之前应该先强行检查文件,以确保文件系统处于一至性状态
01
02
03
04
05
06
07
08
09
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
[root@ZhongH100 ~]# umount /dev/VGtest/LVtest1       #卸载/dev/VGtest/LVtest1
[root@ZhongH100 ~]# e2fsck -f /dev/VGtest/LVtest1    #强制检查文件系统
e2fsck 1.41.12 (17-May-2010)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/VGtest/LVtest1: 12/262144 files (0.0% non-contiguous), 33871/1048576 blocks
[root@ZhongH100 ~]# resize2fs /dev/VGtest/LVtest1 1G  #缩减逻辑大小到1G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/VGtest/LVtest1 to 262144 (4k) blocks.
The filesystem on /dev/VGtest/LVtest1 is now 262144 blocks long.
[root@ZhongH100 ~]# lvreduce -L 1G /dev/VGtest/LVtest1
  WARNING: Reducing active logical volume to 1.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce LVtest1? [y/n]: y         #输入y 同意裁剪
  Size of logical volume VGtest/LVtest1 changed from 4.00 GiB (1024 extents) to 1.00 GiB (256 extents).
  Logical volume LVtest1 successfully resized
[root@ZhongH100 ~]# lvs                                #查看逻辑卷
  LV      VG       Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  LVtest1 VGtest   -wi-a-----  1.00g
[root@ZhongH100 ~]# mount /dev/VGtest/LVtest1 /LVtest1/ #挂载逻辑卷/dev/VGtest/LVtest1
[root@ZhongH100 ~]# df -hP                              #查看系统分区详情
Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/vgzhongH-root    30G  3.3G   25G  12% /
tmpfs                       932M     0  932M   0% /dev/shm
/dev/sda1                   477M   34M  418M   8% /boot
/dev/mapper/vgzhongH-data   4.8G   10M  4.6G   1% /data
/dev/mapper/VGtest-LVtest1  944M  2.6M  891M   1% /LVtest1 #已经缩减成功
[root@ZhongH100 ~]# cat /LVtest1/lvtest                  #查看缩减前文件是否受损
this is a test for LVM
[root@ZhongH100 ~]#
8. 缩减磁盘空间
 发现物理磁盘空间使用不足,将其中一块硬盘或分区拿掉
 pvmove /dev/sdb1 #将/dev/sdb1上存储的数据移到其它物理卷中
 vgreduce VGtest /dev/sdb1 #将/dev/sdb1从VGtest卷组中移除
 pvremove /dev/sdb1 #将/dev/sdb1从物理卷上移除
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
[root@ZhongH100 ~]# pvs
  PV         VG       Fmt  Attr PSize  PFree
  /dev/sdb1  VGtest   lvm2 a--  10.00g  9.00g
  /dev/sdb2  VGtest   lvm2 a--  10.00g 10.00g
  /dev/sdb3  VGtest   lvm2 a--  10.00g 10.00g
  /dev/sdc   VGtest   lvm2 a--  20.00g 20.00g
[root@ZhongH100 ~]# pvmove /dev/sdb1
  /dev/sdb1: Moved: 2.3%
  /dev/sdb1: Moved: 86.3%
  /dev/sdb1: Moved: 100.0%
[root@ZhongH100 ~]# vgreduce VGtest /dev/sdb1
  Removed "/dev/sdb1" from volume group "VGtest"
[root@ZhongH100 ~]# pvremove /dev/sdb1
  Labels on physical volume "/dev/sdb1" successfully wiped
[root@ZhongH100 ~]# pvs
  PV         VG       Fmt  Attr PSize  PFree
  /dev/sdb2  VGtest   lvm2 a--  10.00g  9.00g
  /dev/sdb3  VGtest   lvm2 a--  10.00g 10.00g
  /dev/sdc   VGtest   lvm2 a--  20.00g 20.00g
[root@ZhongH100 ~]#
9. 实现快照,进行备份还原
 在/mnt/lvm目录上,我们将原始的目录文件进行快照,然后将/LVtets1目录中的内容清空,并进行还原
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[root@ZhongH100 ~]# cat /LVtest1/lvtest
this is a test for LVM
[root@ZhongH100 ~]# lvcreate -L 30M -n backup -s -p r /dev/VGtest/LVtest1
  Rounding up size to full physical extent 32.00 MiB
  Logical volume "backup" created
[root@ZhongH100 ~]# mkdir /tmp/backup/
[root@ZhongH100 ~]# mount /dev/VGtest/backup /tmp/backup/
mount: block device /dev/mapper/VGtest-backup is write-protected, mounting read-only
[root@ZhongH100 ~]# cat /tmp/backup/lvtest
this is a test for LVM
[root@ZhongH100 ~]# rm -rf /LVtest1/*
You are going to execute "/bin/rm -rf /LVtest1/lost+found /LVtest1/lvtest",please confirm (yes or no):yes
[root@ZhongH100 ~]# cd /LVtest1/
[root@ZhongH100 LVtest1]# ls -l
总用量 0
[root@ZhongH100 LVtest1]# tar xf /tmp/sandy.tar.bz2
[root@ZhongH100 LVtest1]# ls -l
总用量 8
drwx------ 2 root root 4096 5月  21 23:33 lost+found
-rw-r--r-- 1 root root   23 5月  21 23:53 lvtest
[root@ZhongH100 LVtest1]# cat lvtest
this is a test for LVM
[root@ZhongH100 LVtest1]# df -hP
Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/vgzhongH-root    30G  3.3G   25G  12% /
tmpfs                       932M     0  932M   0% /dev/shm
/dev/sda1                   477M   34M  418M   8% /boot
/dev/mapper/vgzhongH-data   4.8G   10M  4.6G   1% /data
/dev/mapper/VGtest-LVtest1  944M  2.5M  891M   1% /LVtest1
/dev/mapper/VGtest-backup   944M  2.6M  891M   1% /tmp/backup
[root@ZhongH100 LVtest1]#

Alpine Linux配置使用命令参考

心生阅读(113)

Alpine Linux是一个面向安全应用的轻量级Linux发行版。它采用了musl libc和busybox以减小系统的体积和运行时资源消耗,同时还提供了自己的包管理工具apk。

Alpine Linux的内核都打了grsecurity/PaX补丁,并且所有的程序都编译为Position Independent Executables (PIE) 以增强系统的安全性。

Alpine Linux的优势和问题

优势

  • Alpine Linux的Docker镜像特点是轻巧(大小只有5M)且有完整的包管理工具(APK)。
  • Docker官方镜像可能会用Alpine Linux替换Ubuntu。

问题

  • Alpine Linux使用了musl,可能和其他Linux发行版使用的glibc实现会有些不同。

Alpine Linux 包管理

apk包管理命令

Alpine使用 apk 进行包管理,通过apk –help命令查看完整的包管理命令,下面列举常用命令:

  • update:从远程镜像源中更新本地镜像源索引

update命令会从各个镜像源列表下载APKINDEX.tar.gz并存储到本地缓存,一般在/var/cache/apk/(Alpine在该目录下)、 /var/lib/apk/ 、/etc/apk/cache/下。

$ apk update
  • add:安装PACKAGES并自动解决依赖关系

add命令从仓库中安装最新软件包,并自动安装必须的依赖包,也可以从第三方仓库添加软件包。

$ apk add openssh openntp vim
$ apk add --no-cache mysql-client
$ apk add docker --update-cache --repository http://mirrors.ustc.edu.cn/alpine/v3.4/main/ --allow-untrusted

安装指定版本软件包

$ apk add asterisk=1.6.0.21-r0
$ apk add 'asterisk<1.6.1'
$ apk add 'asterisk>1.6.1'
  • del:卸载并删除PACKAGES
$ apk del openssh openntp vim
  • upgrade:升级当前已安装的软件包

upgrade命令升级系统已安装的所以软件包(一般包括内核),当然也可指定仅升级部分软件包(通过-u或–upgrade选择指定)。

$ apk update    #更新最新本地镜像源
$ apk upgrade   #升级软件
$ apk add --upgrade busybox   #指定升级部分软件包
  • search:搜索软件包

search命令搜索可用软件包,-v参数输出描述内容,支出通配符,-d或–description参数指定通过软件包描述查询。

$ apk search            #查找所以可用软件包
$ apk search -v         #查找所以可用软件包及其描述内容
$ apk search -v 'acf*'  #通过软件包名称查找软件包
$ apk search -v -d 'docker'   #通过描述文件查找特定的软件包
  • info:列出PACKAGES或镜像源的详细信息

info命令用于显示软件包的信息。

$ apk info              #列出所有已安装的软件包
$ apk info -a zlib       #显示完整的软件包信息
$ apk info --who-owns /sbin/lbu #显示指定文件属于的包

镜像源配置

MIRRORS.txt中是当前Alpine官方提供的镜像源(Alpine安装的时候系统自动选择最佳镜像源)

  • 国内镜像源

清华TUNA镜像源: https://mirror.tuna.tsinghua.edu.cn/alpine/

中科大镜像源: http://mirrors.ustc.edu.cn/alpine/

阿里云镜像源: http://mirrors.aliyun.com/alpine/

如何配置软件源

以中科大源为例:在 /etc/apk/repositories 文件中加入对应源地址就行了,一行一个地址。

$ vi /etc/apk/repositories
# /media/cdrom/apks
http://mirrors.ustc.edu.cn/alpine/v3.5/main
http://mirrors.ustc.edu.cn/alpine/v3.5/community

Alpine Linux init系统

Alpine Linux使用的是 Gentoo 一样的 OpenRC init系统.

以下命令可用于管理init系统

  • rc-update

rc-update主要用于不同运行级增加或者删除服务。

rc-update语法格式

Usage: rc-update [options] add <service> [<runlevel>...]
   or: rc-update [options] del <service> [<runlevel>...]
   or: rc-update [options] [show [<runlevel>...]]

Options: [ asuChqVv ]
  -a, --all                         Process all runlevels
  -s, --stack                       Stack a runlevel instead of a service
  -u, --update                      Force an update of the dependency tree
  -h, --help                        Display this help output
  -C, --nocolor                     Disable color output
  -V, --version                     Display software version
  -v, --verbose                     Run verbosely
  -q, --quiet                       Run quietly (repeat to suppress errors)

使用实例

$ rc-update add docker boot #增加一个服务
$ rc-update del docker boot #删除一个服务
  • rc-status

rc-status 主要用于运行级的状态管理。

rc-status语法格式

Usage: rc-status [options] <runlevel>...
   or: rc-status [options] [-a | -c | -l | -r | -s | -u]

Options: [ aclrsuChqVv ]
  -a, --all                         Show services from all run levels
  -c, --crashed                     Show crashed services
  -l, --list                        Show list of run levels
  -r, --runlevel                    Show the name of the current runlevel
  -s, --servicelist                 Show service list
  -u, --unused                      Show services not assigned to any runlevel
  -h, --help                        Display this help output
  -C, --nocolor                     Disable color output
  -V, --version                     Display software version
  -v, --verbose                     Run verbosely
  -q, --quiet                       Run quietly (repeat to suppress errors)

使用实例

$ rc-status  #检查默认运行级别的状态
$ rc-status -a #检查所有运行级别的状态
  • rc-service

rc-service主用于管理服务的状态

rc-service语法格式

Usage: rc-service [options] [-i] <service> <cmd>...
   or: rc-service [options] -e <service>
   or: rc-service [options] -l
   or: rc-service [options] -r <service>

Options: [ e:ilr:INChqVv ]
  -e, --exists <arg>                tests if the service exists or not
  -i, --ifexists                    if the service exists then run the command
  -I, --ifinactive                  if the service is inactive then run the command
  -N, --ifnotstarted                if the service is not started then run the command
  -l, --list                        list all available services
  -r, --resolve <arg>               resolve the service name to an init script
  -h, --help                        Display this help output
  -C, --nocolor                     Disable color output
  -V, --version                     Display software version
  -v, --verbose                     Run verbosely
  -q, --quiet                       Run quietly (repeat to suppress errors)

使用实例

$ rc-service sshd start #启动一个服务。
$ rc-service sshd stop  #停止一个服务。
$ rc-service sshd restart  #重启一个服务。
  • openrc

openrc主要用于管理不同的运行级。

openrc语法格式

Usage: openrc [options] [<runlevel>]

Options: [ a:no:s:SChqVv ]
  -n, --no-stop                     do not stop any services
  -o, --override <arg>              override the next runlevel to change into
                                    when leaving single user or boot runlevels
  -s, --service <arg>               runs the service specified with the rest
                                    of the arguments
  -S, --sys                         output the RC system type, if any
  -h, --help                        Display this help output
  -C, --nocolor                     Disable color output
  -V, --version                     Display software version
  -v, --verbose                     Run verbosely
  -q, --quiet                       Run quietly (repeat to suppress errors)

Alpine Linux可用的运行级

  • default
  • sysinit
  • boot
  • single
  • reboot
  • shutdown

使用实例

$ openrc single #更改为single运行级
  • 其它指令
$ reboot  #重启系统,类似于shutdown -r now。
$ halt     #关机,类似于shutdown -h now。
$ poweroff #关机

网站泛解析到子目录后自动判断有无public目录Nginx配置详解

心生阅读(79)

我们大家在配置本地 PHP 开发环境时,除非是在 Windows 下,否则我都是偏向于 Nginx + PHP-FPM, 即使 Mac 下已经有了自带的 Apache+PHP 环境,依然如此。一方面是因为 Mac 自带的 PHP 版本不够新(5.6.x),另一方面,Nginx + PHP-FPM 更接近于我的生产服务器环境,而且也方便用 Homebrew 来管理版本和扩展。

在 Mac 下开发 Laravel, 官方提供了 valet, 可以方便地把子目录映射为虚拟主机,但我在使用的时候,遇到一些问题:

  • 真实错误信息难以追踪,总是报 valet 的 index.php 或者 laravel 的 index.php 错误;
  • Symfony 框架里的 config.php/app_debug.php 等无法直接访问。

于是我只保留了 dnsmasq 来管理特定后缀的域名(实现自动解析),然后放弃了 valet,自己做了一个泛解析绑定到本地子目录的配置。

具体配置如下(域名是 *.app):

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
<strong>server {
 listen 80;
 server_name ~^(?<subdomain>.+).app$;
 set $root /Users/kairee/Sites/$subdomain;
  
 if ( -d "/Users/kairee/Sites/$subdomain/public") {
  set $root /Users/kairee/Sites/$subdomain/public;
 }
 root $root;
 charset utf-8;
 client_max_body_size 128M;
 index index.php;
  
 location / {
  try_files $uri $uri/ /index.php$is_args$args;
 }
  
 access_log off;
  
 location ~ \.php\?? {
  fastcgi_split_path_info ^(.+\.php)(/.+)$;
  fastcgi_pass unix:/tmp/php.sock;
  fastcgi_index index.php;
  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 }
  
 location ~ /\.ht {
  deny all;
 }
}</strong>

采用这个配置以后:

  • 如果存在 ~/Sites/domain/public, 则 domain.app 域名的根目录会指向 ~/Sites/domain/public;
  • 如果存在 ~/Sites/domain 但是不存在 ~/Sites/domain/public, 则 domain.app 域名的根目录会指向 ~/Sites/domain;
  • 网站根目录下真实存在的 php 文件可以直接访问,只有不存在的文件才会通过入口文件(index.php)处理;
  • 如果需要支持其它框架,可以在配置文件中加一条 if 语句实现,比如要支持 symfony 的话,复制一下 if 判断块,把 public 改成 web 即可。

我虽然只是用于 mac/linux, 但实际上 Windows 下当然也是可以的,如果你在 Windows 下也使用 Nginx 的话。

QEDEV 运维分享 运维实战

联系我们关于作者