技术文章
Jul
10
CentOS 7.5 最小化安装之后突遇停电,导致系统无法正常启动直接进入修复模式,经过文件系统修复之后系统开机启动。
进系统之后,启动某些服务发现仍然有分区文件损坏,于是想要卸载分区挂载点来修复文件系统,结果执行umount的时候无法卸载,逐执行fuser命令查看是什么进程在占用,结果直接报-bash: fuser: command not found,找不到此命令。
一般这种错误就是系统没有安装相关的包,所以没有这个命令,解决方法很简单,找到这个命令在哪个包里,安装上就可以了,但是麻烦的就是很多命令你不知道是在哪个包里面,还好yum有个功能可以查到某个命令在哪个包里面,使用yum provides ifconfig,yum provides lsof,yum provides fuser等可以查到这个命令的安装包是什么,用起来很方便。
知道在哪个包里使用yum安装即可。
进系统之后,启动某些服务发现仍然有分区文件损坏,于是想要卸载分区挂载点来修复文件系统,结果执行umount的时候无法卸载,逐执行fuser命令查看是什么进程在占用,结果直接报-bash: fuser: command not found,找不到此命令。
一般这种错误就是系统没有安装相关的包,所以没有这个命令,解决方法很简单,找到这个命令在哪个包里,安装上就可以了,但是麻烦的就是很多命令你不知道是在哪个包里面,还好yum有个功能可以查到某个命令在哪个包里面,使用yum provides ifconfig,yum provides lsof,yum provides fuser等可以查到这个命令的安装包是什么,用起来很方便。
知道在哪个包里使用yum安装即可。
Aug
2
ESXI虚拟机磁盘扩容总体上比较简单,为了数据的安全,动手前做好数据备份,或者克隆虚拟机备份,通过VMware vSphere Client客户端连接ESXI,编辑要扩容磁盘的虚拟机设置,选择磁盘可以直接修改为想要扩容的大小,注意该大小确定之后不能往小的修改,重启虚拟机之后你会发现磁盘的容量并没有发生改变,用fdisk -l查看硬盘的容量确实是已修改后的容量了,要想正常使用新增的容量我们还要做以下几步:
一、关闭要扩容的虚拟机,然后把磁盘添加到其他的虚拟机,或者使用LiveCD引导,我们这里直接把磁盘添加到另一台虚拟机,使用VMware vSphere Client客户端连接ESXI,选择要添加磁盘的那台虚拟机,编辑虚拟机设置-添加-硬盘-使用现有虚拟磁盘-浏览选择我们要扩容的那块磁盘之后确定保存,然后重启这台虚拟机。
二、登录虚拟机操作系统,执行以下操作:
[root@localhost ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 268.4 GB, 268435456000 bytes
255 heads, 63 sectors/track, 32635 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: 0xd0b1bc7f
Device Boot Start End Blocks Id System
/dev/sdb1 1 1033 8297541 82 Linux swap / Solaris
/dev/sdb2 1034 20887 159477255 83 Linux
这是我们内部的测试机,磁盘空间有限,为了充分的利用磁盘空间,分区比较简单,就一个交换分区和根分区,下面我们使用fdisk删除根分区,并重新建根分区:
[root@localhost ~]# fdisk /dev/sdb
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): d
Partition number (1-4): 2
Command (m for help): p
Disk /dev/sdb: 268.4 GB, 268435456000 bytes
255 heads, 63 sectors/track, 32635 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: 0xd0b1bc7f
Device Boot Start End Blocks Id System
/dev/sdb1 1 1033 8297541 82 Linux swap / Solaris
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (1034-32635, default 1034):
Using default value 1034
Last cylinder, +cylinders or +size{K,M,G} (1034-32635, default 32635):
Using default value 32635
Command (m for help): wq
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
三、格式化磁盘
使用 resize2fs 扩大文件系统大小,磁盘原有的数据不会丢失。
e2fsck -f /dev/sdb2
resize2fs /dev/sdb2
四、关闭该虚拟机,移除这块磁盘,启动那台要扩容的虚拟机,登录系统之后我们发现磁盘已经是扩容后的大小了,最重要的是数据无损。
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 239G 101G 126G 45% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
[root@localhost ~]#
如果像阿里云那样,数据盘在单独的一块磁盘,就更好操作了。
一、关闭要扩容的虚拟机,然后把磁盘添加到其他的虚拟机,或者使用LiveCD引导,我们这里直接把磁盘添加到另一台虚拟机,使用VMware vSphere Client客户端连接ESXI,选择要添加磁盘的那台虚拟机,编辑虚拟机设置-添加-硬盘-使用现有虚拟磁盘-浏览选择我们要扩容的那块磁盘之后确定保存,然后重启这台虚拟机。
二、登录虚拟机操作系统,执行以下操作:
[root@localhost ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 268.4 GB, 268435456000 bytes
255 heads, 63 sectors/track, 32635 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: 0xd0b1bc7f
Device Boot Start End Blocks Id System
/dev/sdb1 1 1033 8297541 82 Linux swap / Solaris
/dev/sdb2 1034 20887 159477255 83 Linux
这是我们内部的测试机,磁盘空间有限,为了充分的利用磁盘空间,分区比较简单,就一个交换分区和根分区,下面我们使用fdisk删除根分区,并重新建根分区:
[root@localhost ~]# fdisk /dev/sdb
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): d
Partition number (1-4): 2
Command (m for help): p
Disk /dev/sdb: 268.4 GB, 268435456000 bytes
255 heads, 63 sectors/track, 32635 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: 0xd0b1bc7f
Device Boot Start End Blocks Id System
/dev/sdb1 1 1033 8297541 82 Linux swap / Solaris
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (1034-32635, default 1034):
Using default value 1034
Last cylinder, +cylinders or +size{K,M,G} (1034-32635, default 32635):
Using default value 32635
Command (m for help): wq
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
三、格式化磁盘
使用 resize2fs 扩大文件系统大小,磁盘原有的数据不会丢失。
e2fsck -f /dev/sdb2
resize2fs /dev/sdb2
四、关闭该虚拟机,移除这块磁盘,启动那台要扩容的虚拟机,登录系统之后我们发现磁盘已经是扩容后的大小了,最重要的是数据无损。
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 239G 101G 126G 45% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
[root@localhost ~]#
如果像阿里云那样,数据盘在单独的一块磁盘,就更好操作了。
Oct
8
一、安装xhprof
1.1、下载xhprof
下载地址:http://pecl.php.net/package/xhprof
我们选择最新的版本下载:
wget http://pecl.php.net/get/xhprof-0.9.4.tgz
1.2、解压
tar xzvf xhprof-0.9.4.tgz
1.3、编译安装
cd xhprof-0.9.4/extension/
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
1.4、配置
vi /usr/local/webserver/php/etc/php.ini
添加:
[xhprof]
extension = "xhprof.so"
xhprof.output_dir=/tmp/xhprof
1.5、查看xhprof是否正常加载
/usr/local/webserver/php/bin/php -m|grep xhprof
重启php-fpm
/usr/local/webserver/php/sbin/php5 restart
你也可以访问phpinfo页面查看是否已经加载xhprof
二、安装graphviz工具
2.1、使用yum安装
yum install graphviz libpng libpng-devel -y
2.2、编译安装
下载地址:http://www.graphviz.org/Download_source.php
下载当前最新版本
wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.38.0.tar.gz
2.3、解压
tar xzvf graphviz-2.38.0.tar.gz
2.4、编译
cd graphviz-2.38.0/
./configure --with-png=yes
make
make install
三、配置实例及xhprof图形化web工具
3.1、到xhprof文件目录复制相关文件到站点目录
cp -r examples xhprof_html xhprof_lib /home/www/
3.2、运行实例查看效果
打开浏览器输入你的站点访问地址:http://url/examples/sample.php
你会得到例似http:///index.php?run=561600a67ba32&source=xhprof_foo的URL,如下图:
把http://后面输入你的站点访问地址,再次使用浏览器打开就可以看见运行的结果了。
如果你点击:[View Full Callgraph]出现failed to execute cmd " dot -Tpng"的错误,可能是你的php.ini配置中disable_functions那里禁用了proc_open函数,修改php.ini配置文件去掉这个限制就可以图形展示了,感兴趣的朋友可以自己配置一个玩玩。
1.1、下载xhprof
下载地址:http://pecl.php.net/package/xhprof
我们选择最新的版本下载:
wget http://pecl.php.net/get/xhprof-0.9.4.tgz
1.2、解压
tar xzvf xhprof-0.9.4.tgz
1.3、编译安装
cd xhprof-0.9.4/extension/
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
1.4、配置
vi /usr/local/webserver/php/etc/php.ini
添加:
[xhprof]
extension = "xhprof.so"
xhprof.output_dir=/tmp/xhprof
1.5、查看xhprof是否正常加载
/usr/local/webserver/php/bin/php -m|grep xhprof
重启php-fpm
/usr/local/webserver/php/sbin/php5 restart
你也可以访问phpinfo页面查看是否已经加载xhprof
二、安装graphviz工具
2.1、使用yum安装
yum install graphviz libpng libpng-devel -y
2.2、编译安装
下载地址:http://www.graphviz.org/Download_source.php
下载当前最新版本
wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.38.0.tar.gz
2.3、解压
tar xzvf graphviz-2.38.0.tar.gz
2.4、编译
cd graphviz-2.38.0/
./configure --with-png=yes
make
make install
三、配置实例及xhprof图形化web工具
3.1、到xhprof文件目录复制相关文件到站点目录
cp -r examples xhprof_html xhprof_lib /home/www/
3.2、运行实例查看效果
打开浏览器输入你的站点访问地址:http://url/examples/sample.php
你会得到例似http:///index.php?run=561600a67ba32&source=xhprof_foo的URL,如下图:
把http://后面输入你的站点访问地址,再次使用浏览器打开就可以看见运行的结果了。
如果你点击:[View Full Callgraph]出现failed to execute cmd " dot -Tpng"的错误,可能是你的php.ini配置中disable_functions那里禁用了proc_open函数,修改php.ini配置文件去掉这个限制就可以图形展示了,感兴趣的朋友可以自己配置一个玩玩。
May
12
我们知道在Linux中删除文件一般使用rm, 但是rm命令并不会真的清空保存该文件的数据块的内容,而只是释放了该文件所占用的索引节点和数据块。因此用rm删除的文件是可以通过一些方法恢复的(比如可以用debugfs恢复,具体方法Google之)。
有些时候我们要彻底删除一些文件,可以使用shred命令来实现,shred是coreutils的一部分,所以Linux中基本都会有这个命令。
shred彻底删除文件的方法:
$ shred -u file
shred会用一些随机内容覆盖文件所在的节点和数据块,并删除文件(-u参数)。
如果想清除的更彻底一点可以加-z 参数,意思是先用随机数据填充,最后再用0填充。
$ shred -u -z file
另外shred还可以清除整个分区或磁盘,比如想彻底清除/dev/sdb1分区的内容可以这样:
$ shred /dev/sdb1 (注意不要加-u参数)
shred的详细参数:
-f, --force 更改权限允许写入(如有必要)
-n, --iterations=N 重写N次,默认为3次
--random-source=FILE 从指定文件读取数据
-s, --size=N 将文件粉碎为固定大小 (可使用后缀如K、M、C等)
-u, --remove 重写后截短并移除文件
-v, --verbose 显示进度
-z, --zero - add 用0覆盖数据
–help 显示帮助
–version 显示版本信息
有些时候我们要彻底删除一些文件,可以使用shred命令来实现,shred是coreutils的一部分,所以Linux中基本都会有这个命令。
shred彻底删除文件的方法:
$ shred -u file
shred会用一些随机内容覆盖文件所在的节点和数据块,并删除文件(-u参数)。
如果想清除的更彻底一点可以加-z 参数,意思是先用随机数据填充,最后再用0填充。
$ shred -u -z file
另外shred还可以清除整个分区或磁盘,比如想彻底清除/dev/sdb1分区的内容可以这样:
$ shred /dev/sdb1 (注意不要加-u参数)
shred的详细参数:
-f, --force 更改权限允许写入(如有必要)
-n, --iterations=N 重写N次,默认为3次
--random-source=FILE 从指定文件读取数据
-s, --size=N 将文件粉碎为固定大小 (可使用后缀如K、M、C等)
-u, --remove 重写后截短并移除文件
-v, --verbose 显示进度
-z, --zero - add 用0覆盖数据
–help 显示帮助
–version 显示版本信息
May
12
当我们在linux系统中要删除数万或者数十万甚至数百万的文件时使用rm -rf *就不太好用,因为要等待很长一段时间。在这种情况之下我们可以使用linux系统命令rsync来巧妙的处理。rsync实际上用的是替换原理,处理数十万个文件也是秒删。
1. rsync安装,有些系统默认安装有该命令
CentOS 系统:yum install rsync
其他的可以源码安装,到下面的网站下载
http://rsync.samba.org
2. rsync提供了一些跟删除有关的参数
rsync --help | grep delete
--del an alias for --delete-during
--delete delete extraneous files from destination dirs
--delete-before receiver deletes before transfer, not during
--delete-during receiver deletes during transfer (default)
--delete-delay find deletions during, delete after
--delete-after receiver deletes after transfer, not during
--delete-excluded also delete excluded files from destination dirs
--ignore-errors delete even if there are I/O errors
--max-delete=NUM don't delete more than NUM files
其中--delete-before接收者在传输之前进行删除操作
3. 示例
清空目录或文件,如下:
1、先建立一个空目录
mkdir /data/blank
2、用rsync删除目标目录
rsync --delete-before -d -a -H -v --progress --stats /data/blank/ /var/edatacache/
或者
rsync --delete-before -d /data/blank/ /var/edatacache/
这样/var/edatacache目录就被快速的清空了。
选项说明:
–delete-before 接收者在传输之前进行删除操作
–progress 在传输时显示传输过程
-a 归档模式,表示以递归方式传输文件,并保持所有文件属性
-H 保持硬连接的文件
-v 详细输出模式
–stats 给出某些文件的传输状态
-d transfer directories without recursing
3、也可以用来删除大文件
假如我们在/root/下有一个几十G甚至上百G的文件data,现在我们要删除它
一、创建一个空文件
touch /root/empty
二、用rsync清空/root/data文件
rsync --delete-before -d --progess --stats /root/empty /root/data
注意:
当SRC和DEST文件性质不一致时将会报错
当SRC和DEST性质都为文件【f】时,意思是清空文件内容而不是删除文件
当SRC和DEST性质都为目录【d】时,意思是删除该目录下的所有文件,使其变为空目录
1. rsync安装,有些系统默认安装有该命令
CentOS 系统:yum install rsync
其他的可以源码安装,到下面的网站下载
http://rsync.samba.org
2. rsync提供了一些跟删除有关的参数
rsync --help | grep delete
--del an alias for --delete-during
--delete delete extraneous files from destination dirs
--delete-before receiver deletes before transfer, not during
--delete-during receiver deletes during transfer (default)
--delete-delay find deletions during, delete after
--delete-after receiver deletes after transfer, not during
--delete-excluded also delete excluded files from destination dirs
--ignore-errors delete even if there are I/O errors
--max-delete=NUM don't delete more than NUM files
其中--delete-before接收者在传输之前进行删除操作
3. 示例
清空目录或文件,如下:
1、先建立一个空目录
mkdir /data/blank
2、用rsync删除目标目录
rsync --delete-before -d -a -H -v --progress --stats /data/blank/ /var/edatacache/
或者
rsync --delete-before -d /data/blank/ /var/edatacache/
这样/var/edatacache目录就被快速的清空了。
选项说明:
–delete-before 接收者在传输之前进行删除操作
–progress 在传输时显示传输过程
-a 归档模式,表示以递归方式传输文件,并保持所有文件属性
-H 保持硬连接的文件
-v 详细输出模式
–stats 给出某些文件的传输状态
-d transfer directories without recursing
3、也可以用来删除大文件
假如我们在/root/下有一个几十G甚至上百G的文件data,现在我们要删除它
一、创建一个空文件
touch /root/empty
二、用rsync清空/root/data文件
rsync --delete-before -d --progess --stats /root/empty /root/data
注意:
当SRC和DEST文件性质不一致时将会报错
当SRC和DEST性质都为文件【f】时,意思是清空文件内容而不是删除文件
当SRC和DEST性质都为目录【d】时,意思是删除该目录下的所有文件,使其变为空目录