Submitted by admin on 2010, December 26, 1:37 PM
Submitted by admin on 2010, December 20, 10:43 AM
在现在的Linux上IPv6已经在默认安装下被支持,但是对于一些对IPv6支持不是很好的应用服务器来说,开启了IPv6反而会影响服务器的网络性能,毕竟现在的网络交换设备不是IPv6的。
在Linux下首先确认IPv6是否已经被启用,可以从三个方面确定。
1.使用ifconfig查看自己的IP地址是否含有IPv6地址。
eth0 Link encap:Ethernet HWaddr 00:13:D4:05:B2:ED
inet addr:119.119.xxx.xx Bcast:119.119.115.255 Mask:255.255.255.0
inet6 addr: fe80::213:d4ff:fe05:b2ed/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1054562 errors:0 dropped:0 overruns:0 frame:0
TX packets:538136 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:346189738 (330.1 MiB) TX bytes:246935731 (235.4 MiB)
Interrupt:209 Base address:0xd800
2.查看服务监听的IP中是否有IPv6格式的地址。(netstat -tuln)
tcp 0 0 0.0.0.0:8100 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:843 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:81 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:113 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 :::8080 :::* LISTEN
tcp 0 0 :::22 :::* LISTEN
tcp 0 0 :::443 :::* LISTEN
udp 0 0 0.0.0.0:68 0.0.0.0:*
udp 0 0 0.0.0.0:837 0.0.0.0:*
udp 0 0 0.0.0.0:840 0.0.0.0:*
udp 0 0 0.0.0.0:111 0.0.0.0:*
udp 0 0 0.0.0.0:631 0.0.0.0:*
3.使用lsmod查看ipv6的模块是否被加载。
Module Size Used by
parport_pc 24577 1
lp 12077 0
parport 37129 2 parport_pc,lp
autofs4 24901 0
i2c_dev 11329 0
i2c_core 22081 1 i2c_dev
sunrpc 162597 1
loop 15817 2
dm_multipath 20681 0
button 6481 0
battery 8901 0
ac 4805 0
md5 4033 1
ipv6 234881 14
*****上面的黑体字部分为需要注意的地方*****
当确定IPv6已经开启后就可以按照下面的方法将其关闭
1.使用vi编辑器,打开/etc/modprobe.conf
2.在文档中加入如下的两条:
alias net-pf-10 off
alias ipv6 off
保存退出,并且重新启动系统。
重启之后可以使用上面的三种方法去验证IPv6支持是否已经被关闭。
IPv6是默认支持的,所以当你要重新开起IPv6支持时,将/etc/modprobe.conf中的两条指令注释掉就可以了。
Submitted by admin on 2010, December 20, 10:10 AM
功能说明:显示网络状态。
语 法:netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]
补充说明:利用netstat指令可让你得知整个Linux系统的网络情况。
参 数:
-a或--all 显示所有连线中的Socket。
-A<网络类型>或--<网络类型> 列出该网络类型连线中的相关地址。
-c或--continuous 持续列出网络状态。
-C或--cache 显示路由器配置的快取信息。
-e或--extend 显示网络其他相关信息。
-F或--fib 显示FIB。
-g或--groups 显示多重广播功能群组组员名单。
-h或--help 在线帮助。
-i或--interfaces 显示网络界面信息表单。
-l或--listening 显示监控中的服务器的Socket。
-M或--masquerade 显示伪装的网络连线。
-n或--numeric 直接使用IP地址,而不通过域名服务器。
-N或--netlink或--symbolic 显示网络硬件外围设备的符号连接名称。
-o或--timers 显示计时器。
-p或--programs 显示正在使用Socket的程序识别码和程序名称。
-r或--route 显示Routing Table。
-s或--statistice 显示网络工作信息统计表。
-t或--tcp 显示TCP传输协议的连线状况。
-u或--udp 显示UDP传输协议的连线状况。
-v或--verbose 显示指令执行过程。
-V或--version 显示版本信息。
-w或--raw 显示RAW传输协议的连线状况。
-x或--unix 此参数的效果和指定"-A unix"参数相同。
--ip或--inet 此参数的效果和指定"-A inet"参数相同
Submitted by admin on 2010, December 14, 3:42 PM
参考vim中的介绍:
要开始编辑一个需要加密的新文件,可以用 “-x” 参数来启动 Vim。例如:
vim -x exam.txt
Vim 提示你确定一个密码,用于为文件加密和解密:
Enter encryption key:
现在仔细键入那个密码。你所键入的字符将为星号代替,因此你看不到。为了避免由于
打字错误引起麻烦,Vim 要求你再输入一次密码:
Enter same key again:
现在你可以像平时一样编辑这个文件并把你所有的秘密放进去。当你编完文件要退出 Vim
时,这个文件就被加密存盘了。
当你用 Vim 编辑这个文件时,它就会要求你再输入那同一个密码。你不需要用 “-x”
参数。你也可以用普通的 “:edit” 命令编辑加密的文件。Vim 给这个文件加上一句标记,
据以识别那是经过加密的文件。
如果你试图用另一个程序来阅读这个文件,你将读到一堆乱码。如果你用 Vim 来编辑
这个文件,但输入了错误的密码,你也只能得到乱码。Vim 并不具备检验密码正确性的机
理 (这一点使得破译密码更为困难)。
开 / 关 加 密
要给一个文件撤除加密,设定 ‘key’ 选项为空字符串:
:set key=
你下次把这个文件存盘时,存盘的文件就是未经加密的。
设定 ‘key’ 选项来启用加密是个坏主意。因为密码会被清清楚楚地显示在屏幕上。任
何人都可以偷看到你的密码。
为了避免这样的问题,创造了 “:X” 命令。它会像 “-x” 参数向你索取一个密码:
:X
Enter encryption key: ******
Enter same key again: ******
加 密 的 局 限 性
Vim 采用的加密算法有弱点的。它对于防止那种偷窥者是绰绰有余了,但不足以防止一
个手上有大量时间的密码专家。而且, 你应该知道交换文件是不加密的;所以当你在编辑
文件时,拥有超级用户权限的人能够读取未经加密的文件文本。
不让人们读到你的交换文件的一个方法就是不使用交换文件。如果在命令行上用了 -n
参数,交换文件就不会被创建了 (Vim 把所有的东西都存放在内存里)。例如,要编辑经
过加密的文件 “file.txt”,但不用交换文件,请用下面的命令:
vim -x -n file.txt
如果你已在经编辑这个文件了,那么交换文件 swapfile 可以用下面的命令禁止:
:setlocal noswapfile
由于没了交换文件,文件复原就不可能了。为了避免失去编辑的成果,要比平时更勤快地
存盘你的文件。
文件在内存中以明文形式存在。因此任何具备权限的人都能进入编辑者的内存浏览,从而,
发现这个文件的内容。
如果你使用信息文件 viminfo,别忘了文本寄存器的内容也是明明白白写在其中的。
如果你真的要保证一个文件内容的安全,那么,你必须永远只在一个不联网的可携式
计算机上编辑这个文件,使用优良的加密工具,并且在不用时,把你的计算机锁进一个
大保险箱。
============
#!/bin/bash
# Encrypt file with vim
if (test $# -lt 2) then
echo Usage: decrypt password filename
else
vim -e -s -c “:set key=$1″ -c ‘:wq’ $2
echo “$2 encrypted.”
fi
Submitted by admin on 2010, December 14, 3:31 PM
测试:
以 I386/RedHat6.2 为测试环境
目录:
★ 命令行参数简介
★ xxd使用中的注意事项
★ xxd使用举例
. 从偏移0x10开始显示,也就是缺省情况下的第一行不显示
. 显示倒数0x30个字节(缺省情况下倒数3行)
. 显示120字节,连续显示,每行20字节
. 显示120字节,每行12字节
. 显示0x6c偏移开始的12个字节
. 创建一个65537字节大小的文件,除了最后一个字节是'A',其余都是0x00
. 使用autoskip选项
. 创建只包含一个'A'字节的文件
. 复制输入文件到输出文件,且给输出文件前部增加100字节的0x00
. 二进制文件打补丁
. Read single characters from a serial line
★ 命令行参数简介
xxd -h
xxd [options] [infile [outfile]]
xxd -r [options] [infile [outfile]]
xxd可以创建给定文件或标准输入的hexdump,也可以还原一个hexdump成以前的二进
制文件。如果没有指定文件或指定文件名为-,则采用标准输入。如果没有指定输出
文件或指定文件名为-,则采用标准输出。
-a
toggle autoskip: A single '*' replaces nul-lines. Default off.
-b
采用2进制显示,而不是默认的16进制
xxd -l 32 -b scz.sh
0000000: 00100011 00100001 00100000 00101111 01100010 01101001 #! /bi
0000006: 01101110 00101111 01110011 01101000 00001010 00100011 n/sh.#
000000c: 00001010 00100011 00100000 11001000 10100001 11010110 .# ...
0000012: 11110111 11001001 11101000 10110001 10111000 10111010 ......
0000018: 11000101 00001010 00100011 00100000 01100011 01100001 ..# ca
000001e: 01110100 00100000 t
-c cols
默认16,-i指定时采用12,-p指定时采用30,-b指定时采用6,最大256
-c8、-c 8、-c 010是等价的,其他选项类似。
xxd -c 8 -l 32 -g 1 scz.sh
0000000: 23 21 20 2f 62 69 6e 2f #! /bin/
0000008: 73 68 0a 23 0a 23 20 c8 sh.#.# .
0000010: a1 d6 f7 c9 e8 b1 b8 ba ........
0000018: c5 0a 23 20 63 61 74 20 ..# cat
-E
不用ASCII显示,而采用EBCDIC编码,不影响16进制显示
xxd -E -l 32 -g 1 scz.sh
0000000: 23 21 20 2f 62 69 6e 2f 73 68 0a 23 0a 23 20 c8 ......>........H
0000010: a1 d6 f7 c9 e8 b1 b8 ba c5 0a 23 20 63 61 74 20 .O7IY...E..../..
-g bytes
比较下面三种显示方式,缺省bytes为2,指定-b时采用1。
xxd -l 32 -g 0 scz.sh
0000000: 2321202f62696e2f73680a230a2320c8 #! /bin/sh.#.# .
0000010: a1d6f7c9e8b1b8bac50a232063617420 ..........# cat
xxd -l 32 -g 1 scz.sh
0000000: 23 21 20 2f 62 69 6e 2f 73 68 0a 23 0a 23 20 c8 #! /bin/sh.#.# .
0000010: a1 d6 f7 c9 e8 b1 b8 ba c5 0a 23 20 63 61 74 20 ..........# cat
xxd -l 32 -g 2 scz.sh
0000000: 2321 202f 6269 6e2f 7368 0a23 0a23 20c8 #! /bin/sh.#.# .
0000010: a1d6 f7c9 e8b1 b8ba c50a 2320 6361 7420 ..........# cat
-h
显示帮助信息
-i
以C语言数组形式显示,如果输入来自stdin,则有所区别
unsigned char scz_sh[] = {
0x23, 0x21, 0x20, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x73, 0x68, 0x0a, 0x23,
0x0a, 0x23, 0x20, 0xc8, 0xa1, 0xd6, 0xf7, 0xc9, 0xe8, 0xb1, 0xb8, 0xba,
0xc5, 0x0a, 0x23, 0x20, 0x63, 0x61, 0x74, 0x20
};
unsigned int scz_sh_len = 32;
注意区分下面两条命令执行效果的不同
xxd -l 12 -i < scz.sh
0x23, 0x21, 0x20, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x73, 0x68, 0x0a, 0x23
xxd -l 12 -i scz.sh
unsigned char scz_sh[] = {
0x23, 0x21, 0x20, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x73, 0x68, 0x0a, 0x23
};
unsigned int scz_sh_len = 12;
-l len
只显示<len>这么多字节
-p
以连续的16进制表示显示,比较下面的不同显示效果
xxd -u -l 32 scz.sh
0000000: 2321 202F 6269 6E2F 7368 0A23 0A23 20C8 #! /bin/sh.#.# .
0000010: A1D6 F7C9 E8B1 B8BA C50A 2320 6361 7420 ..........# cat
xxd -u -l 32 -p scz.sh
2321202F62696E2F73680A230A2320C8A1D6F7C9E8B1B8BAC50A23206361
7420
-r
reverse operation: convert (or patch) hexdump into binary.
If not writing to stdout, xxd writes into its output file without
truncating it. Use the combination -r -p to read plain hexadecimal
dumps without line number information and without a particular
column layout. Additional Whitespace and line-breaks are allowed
anywhere.
这个选项要用的话,一定要提前测试
-seek offset
When used after -r : revert with <offset> added to file positions
found in hexdump.
-s [+][-]seek
start at <seek> bytes abs. (or rel.) infile offset. + indicates
that the seek is relative to the current stdin file position
(meaningless when not reading from stdin). - indicates that the seek
should be that many characters from the end of the input (or if
combined with + : before the current stdin file position).
Without -s option, xxd starts at the current file position.
-u
采用大写16进制字母显示,缺省采用小写16进制字母
-v
显示版本信息
★ xxd使用中的注意事项
xxd -r has some builtin magic while evaluating line number information. If the ouput file
is seekable, then the linenumbers at the start of each hexdump line may be out of order,
lines may be missing, or overlapping. In these cases xxd will lseek(2) to the next position.
If the output file is not seekable, only gaps are allowed, which will be filled by null-
bytes.
xxd -r never generates parse errors. Garbage is silently skipped.
When editing hexdumps, please note that xxd -r skips everything on the input line after
reading enough columns of hexadecimal data (see option -c). This also means, that changes to
the printable ascii (or ebcdic) columns are always ignored. Reverting a plain (or
postscript) style hexdump with xxd -r -p does not depend on the correct number of columns.
Here an thing that looks like a pair of hex-digits is interpreted.
xxd -s +seek may be different from xxd -s seek , as lseek(2) is used to "rewind" input. A
'+' makes a difference if the input source is stdin, and if stdin's file position is not at
the start of the file by the time xxd is started and given its input. The following
examples may help to clarify (or further confuse!)...
Rewind stdin before reading; needed because the `cat' has already read to the end of stdin.
% sh -c 'cat > plain_copy; xxd -s 0 > hex_copy' < file
Hexdump from file position 0x480 (=1024+128) onwards. The `+' sign means "relative to the
current position", thus the `128' adds to the 1k where dd left off.
% sh -c 'dd of=plain_snippet bs=1k count=1; xxd -s +128 > hex_snippet' < file
Hexdump from file position 0x100 ( = 1024-768) on.
% sh -c 'dd of=plain_snippet bs=1k count=1; xxd -s +-768 > hex_snippet' < file
However, this is a rare situation and the use of `+' is rarely needed. the author prefers
to monitor the effect of xxd with strace(1) or truss(1), whenever -s is used.
★ xxd使用举例
.. 从偏移0x10开始显示,也就是缺省情况下的第一行不显示
xxd -s 0x10 scz.sh
.. 显示倒数0x30个字节(缺省情况下倒数3行)
xxd -s -0x30 -g 1 scz.sh
.. 显示120字节,连续显示,每行20字节
xxd -l 120 -p -c 20 scz.sh
.. 显示120字节,每行12字节
xxd -l 120 -c 12 -g 1 scz.sh
.. 显示0x6c偏移开始的12个字节
xxd -l 12 -c 12 -g 1 -s 0x6c scz.sh
.. 创建一个65537字节大小的文件,除了最后一个字节是'A',其余都是0x00
echo 10000: 41 | xxd -r > scz.txt
od -A x -t x1 scz.txt
000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
010000 41
010001
.. 使用autoskip选项
xxd -a scz.txt
0000000: 0000 0000 0000 0000 0000 0000 0000 0000 ................
*
0010000: 41 A
注意,缺省情况下autoskip功能是关闭的,但od看样子缺省就是打开的。
.. 创建只包含一个'A'字节的文件
echo '010000: 41' | xxd -r -s -0x10000 > scz_1
注意对比这些效果
echo '010: 41 42 43 44 45 46' | xxd -r -s 0 > scz_1
echo '010: 41 42 43 44 45 46' | xxd -r -s -0x10 > scz_1
等价于
echo '0: 41 42 43 44 45 46' | xxd -r -s 0 > scz_1
echo '010: 41 42 43 44 45 46' | xxd -r -s -0x12 > scz_1
执行的时候报错,xxd: sorry, cannot seek backwards.
echo '010: 41 42 43 44 45 46' | xxd -r -s 0x10 > scz_1
等价于
echo '020: 41 42 43 44 45 46' | xxd -r -s 0 > scz_1
.. 复制输入文件到输出文件,且给输出文件前部增加100字节的0x00
xxd scz_1 | xxd -r -s 100 > scz_2
od -A x -t x1 scz_2
000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
000060 00 00 00 00 41
000065
.. 二进制文件打补丁
echo '0: 41 42 43 44 45 46' | xxd -r -s 0 > scz_1
od -A x -t x1 scz_1
echo '4: 47 48' | xxd -r - scz_1
od -A x -t x1 scz_1
.. Use xxd as a filter within an editor such as vim(1) to hexdump a region
marked between `a' and `z'.
:'a,'z!xxd
.. Use xxd as a filter within an editor such as vim(1) to recover a
binary hexdump marked between `a' and `z'.
:'a,'z!xxd -r
.. Use xxd as a filter within an editor such as vim(1) to recover one line
of a hexdump. Move the cursor over the line and type:
!!xxd -r
.. Read single characters from a serial line
xxd -c1 < /dev/term/b &
stty < /dev/term/b -echo -opost -isig -icanon min 1
echo -n foo > /dev/term/b
Submitted by admin on 2010, December 8, 7:57 PM
LVM有关概念 LVM(Logical Volume Manager)即逻辑卷管理器,它最先是在Linux 2.4内核中被集成到内核中去的,它的出现改变了传统的磁盘空间管理理念。以往在安装操作系统时需要规划好分区大小,即使利用了RAID技术也要规划好每个分区的大小,因为一旦分好区后要改变其大小是非常困难的事情。在Windows下有大家熟悉的Partition Magic工具可以用来调整分区大小,但它有一个缺点是要么在调整前要关闭系统或调整后重启系统。 这在普通PC机上使用还行,要在提供不间断服务的服务器上使用就会造成服务中断,不过这个问题在Linux下随着LV技术的出现一切都得到解决,LV可以在不用重启系统的情况动态增加可用空间大小,不过前提得是使用热插拔硬盘,或事先将硬盘装入而不使用。本文我将使用名词LV(可不是LV包)而不是LVM,因为LV才是主角。 首先我们要弄清楚LV领取的几个关键名词概念: 物理介质:就是我们通常说的硬盘,简称pm 物理卷:就是我们通常说的硬盘分区,简称pv 物理分区:它是由LVM命令在物理卷上创建的最小LVM寻址单元,在创建物理卷时可以指定物理分区的大小,默认值是4M,简称pe 卷组:由一个多多个物理卷组成的逻辑单元,简称vg 逻辑分区:它与物理分区一一对应,大小相等,简称le 逻辑卷:从卷组中分配一定大小的空间创建的逻辑单元,也可以使用一个完整的卷组空间大小来创建一个逻辑卷,简称lv 上面这几个关键名词的关系可以用下图来解释: 图中没有给出le(逻辑分区),因为它对于描述整个概念来说不太重要。如何理解这个图呢? 首先pv1和pv2是物理卷,pv1对应的可能是一整块硬盘,也可能是硬盘中的一个分区,如/dev/hda1,pv2也应这样理解;pv1中包含的pe1,pe2,pe3都是经过pvcreate命令在pv1上做的标记,可以理解为将pv1分解成3个小块,响应的pv2下的pe1,pe2,pe3 也做此理解; vg1是卷组,它是由pv1下的pe1和pe2组成的,即从pv1的空间中分一部分(pe1和pe2)来组成卷组vg1,并且我给该卷组命名为 oracle,注意物理卷没有名字,直接用/dev/hda1或/dev/sda的形式来称呼它,vg2是跨了两个物理卷组成的,它是由pv1中的pe3 和pv2中的pe1,pe2组成,可以看出卷组可以跨我们通常所说的硬盘分区,也可以跨多个硬盘; lv1是在卷组vg1上创建的逻辑卷,它使用了整个vg1的空间,而lv2和lv3都是从vg2空间创建的逻辑卷,可以看出一个卷组可以包括一个或多个逻辑卷,注意逻辑卷不能跨卷组,也就是说如果要想在两块硬盘上创建一个逻辑卷,必须经过卷组的转换才能实现,因为卷组是可以跨多块硬盘的; 在逻辑卷的基础上我们可以创建文件系统,如ext3,jfs等,和在普通分区上创建文件系统没有什么区别,最后可以将逻辑卷挂载在某个挂载点上,如/oracle。 ◆创建LV 我这里打算以Red Hat Enterprise Linux 5为系统环境,介绍一下在命令行的操作,不过其他发行版应该都适用,至于在图形界面下的操作我尝试了一下反而不习惯,所以本文就省略掉在图形界面的操作。 要创建一个lv,从上面的图中可以看出,首先得准备好一块硬盘或一个分区,注意分区还得是Linux LVM类型,下面我一步一步说明: 假设已经在系统中增加了3块硬盘,分别是/dev/hda,/dev/hdb,/dev/hdd,因为/dev/hdc被光驱占用了,每块硬盘大小假设是100M,以/dev/hda为例,其他类推
回车,输入n(创建一个新分区),回车,输入p(创建一个主分区),回车,输入1(主分区号),回车,回车(输入分区起始地址,默认1),回车(输入分区结束地址,默认是整块硬盘的最后一数据块),输入t(修改分区类型,默认是83),回车,输入8e(Linux LVM分区类型),输入w(保存并退出),这样会创建/dev/hda1分区,完全占用了硬盘/dev/hda的空间。同样对/dev/hdb和/dev /hdd做对应的操作。 前面的操作完成后,就可以开始创建pv了
物理卷pv创建成功会有类似【Physical volume "/dev/hdd1" successfully created】的提示。可以使用pvdisplay命令查看物理卷的详细信息。执行pvcreate命令后会向硬盘中写如pv信息,同时也会在/etc /lvm/backup目录下产生同样的pv信息文件。 接下来就可以创建卷组vg了
注意:创建卷组时如果使用默认的参数,最后在此基础上创建逻辑卷时会有大小限制,默认最大不能超过256G,如果在生产系统中规划逻辑卷大小会超过256G时,那么在创建卷组时就要使用参数-s并指定一个分为大小,如32M,这样创建的卷组就可以容纳2T的逻辑卷了。如:
创建卷组时要为卷组指定一个名字,如该卷组会用来存储oracle数据,就可以命名为oracle,如果是用来存储源代码,就可以命名为src,当然随你喜欢了,执行vgcreate命令后会向硬盘中写入卷组信息,也会在/etc/lvm/backup目录下的对应文件中写入卷组信息。有兴趣的读者可以打开看看,都是文本格式的文件。卷组创建好后可以使用命令vgdisplay命令查看其详细信息。 卷组创建好后,就可以开始创建主角逻辑卷了
这里的-L参数后跟的是该逻辑卷的大小,它们之间没有空格,-n参数后跟的是该逻辑卷的名字,最后是卷组的名字。 创建好后可以使用命令lvdisplay命令查看其详细信息,执行lvcreate命令会向硬盘中写入逻辑卷信息,对应的/etc/lvm/backup下的文件也会得到更新。 接下来可以在逻辑卷上创建文件系统了
创建挂载点
挂载逻辑卷
这里挂载时是不需要指定文件系统类型的。
返回lost+found文件夹,说明挂载成功。 至此,我们已经可以正常使用逻辑卷了,如在挂载点下创建目录,创建文件,设置权限等。不过逻辑卷的使用远不止这么简单,下面就列举一些在实际工作中会遇到的问题及处理办法。 ◆增加LV大小 在创建LV时指定的大小现在可能已经不够使用了,这与普通分区空间快要用完的情景非常类似,但使用LV时可以动态增加其大小,而要增加分区大小,事情就麻烦多了。但不是说想使LV增大就能增大的,它还受限于卷组大小和物理卷大小,如果卷组空间已经完全分配,那么要增大LV就必须先增加可用物理卷。这里以逻辑卷lv1(oracle)为例进行说明,增加逻辑卷大小要使用的命令是lvextent
这时看到逻辑卷大小已经变大了,但这并不意味着文件系统就随着一起变大了,此时mount上后,用df命令查看还是增大前的大小,这时需要用到另一个工具ext2resize,因国内www.sf.net被封,从下面的地址下载http://www.mirrorservice.org/sites /download.sourceforge.net/pub/sourceforge/e/ex/ext2resize/ext2resize- 1.1.19-1.i386.rpm,ext2resize 是一款可以增大/减小ext2/ext3文件系统的工具,其实lvextent带有一个-r参数也是重设文件系统大小的,但我在系统中没有发现fsadm 这个命令,它应该是包括在lvm的软件包中,但不知何故我这里没有。安装ext2resize需要创建一个sct用户,安装后有2个命令 ext2resize和ext2online,ext2resize命令必须要在卸载文件系统的情况下才能使用,ext2online可以实现在线重设文件系统大小。
这里的24M即逻辑卷oracle新的大小,在创建逻辑卷时指定大小是10M,但时间创建后是12M,扩展了10M实际上也用掉了12M,所以这里应该就是24M。如果指定大于24的值会报错,而且ext2online命令只能在线增大,不能在线减小。
这时就能看到文件系统变为24M了,与逻辑卷大小一致了。使用ext2online的一个好处是,如果你在该逻辑卷上有正在运行的程序,不能终止服务,但空间快用光了,这时可以透明地增加其大小,不影响服务。 ◆减少LV大小 有时也需要减小LV大小,如减小其中一个LV大小,然后增加另一个LV大小。减小LV大小使用命令lvreduce,减少LV大小前先用ext2resize减少文件系统大小,这与增大的过程是相反的,然后再用lvreduce减少逻辑卷大小。
这时看到/oracle文件系统大小只有9.5M了。 注意ext2resize后的10M是目标大小,即减小为多大,lvreduce命令-L参数后的-14是指减少多少,为了pe和le一一对应,这里就设为14M,其实真正减少不了14M,只能减小12M,这一点可以用lvdisplay命令查看。 注意:减小LV可能会造成数据丢失,所以先要做一次全备份,然后卸载掉文件系统,再进行操作。 ◆利用LV快照备份数据 LVM提供了为逻辑卷作一个快照的功能,目的是想对逻辑卷进行一致性备份,由于它采用了写时复制技术,使得不用停止服务或将逻辑卷设为只读进行备份,因为备份时文件可能正在被写入数据,如数据库文件,LVM提供的快照功能只是记录了文件系统的改变,它并不是对整个文件系统进行备份。 因此备份时要用的空间大小与备份逻辑卷大小不一定要相等,快照使用空间的大小取决于有多少数据正在写入逻辑卷,以及想要保存快照多长时间,快照指定的空间用光时,快照就失效了,需要人工删除。实际上创建快照也是创建了一个逻辑卷,只不过该卷的属性与普通逻辑卷的属性有些不一样。下面以为/dev /oracle/oracle创建一个大小为20M的快照为例,创建快照使用的命令还是lvcreate:
该命令执行结束后,会在/dev/oracle目录下创建一个新的文件oracle_snap,可以使用lvdisplay命令来查看该快照逻辑卷的信息: 它与其他逻辑卷的信息不同,多了一项Allocated to snapshot,这是属性指出了快照空间的使用百分比,目前使用了0.12%,同时注意逻辑卷/dev/oracle/oracle也多了一个属性LV snapshot status,它指出了快照的路径和状态,图中是/dev/oracle/oracle_snap [active],意思是它的快照oracle_snap目前是活动状态。如果我们向/dev/oracle/oracle中填充1M大小的数据,那么快照空间的百分比就会变化(增大)。创建快照后,可以象使用逻辑卷一样进行挂载,然后进行备份。最后不用快照了,使用lvremove /dev/oracle/oracle移除快照。 ◆硬盘替换 以往如果硬盘坏掉,意味着数据丢失,于是人们发明了RAID技术,LVM本身不具备数据冗余功能,但它可以建立的RADI技术之上,即先用几块硬盘组成RAID阵列,再在阵列上进行分区,然后在其上建立逻辑卷,如果是这种情况,其中一块硬盘坏掉,如果是RAID5,那么可以直接拔掉坏硬盘,插一块好的即可。在使用LV的情况下,可以不用重启系统将一块硬盘中的数据转移到另一块上,实际上只需要一个命令pvmove就可以了。这里以移动/dev /oracle/oracle上的数据到/dev/src/src为例进行说明。 首先在/oracle上创建1个文件
将第二块硬盘加入同一卷组,这里假设将/dev/hdb加入到卷组oracle中
这两个命令是将卷组src占用的pv腾出来。
将/dev/hdb1分区加入卷组oracle,这时可以移动分区了
这样将原来的/dev/hda1是的数据全部转移到新的分区/dev/hdb1上了,现在可以将/dev/hda1从卷组oracle中移除。
重新挂载
查看前面创建的文件1.txt是否还在
可以看到文件还在,说明移动成功,这样也就完成了硬盘替换。可以看出替换硬盘没有重启系统,实现了在线替换。整个替换流程如下图所示: ◆将硬盘移到另一台计算机上 在使用普通分区的情况下,将硬盘挂接到其他机器上非常简单,拔下来插上去即可使用,在使用了LVM的情况下,要稍微多一点事情,因为LV的结构是同时保存在硬盘中也保存在/etc/lvm/backup下,在将硬盘移动前,要将这里面的信息删除,这是通过LVM附带的一个命令vgexport实现的,到了另一台机器上后,要创建这个信息,是通过vgimport来实现的,下面以/dev/hda为例进行说明。 首先在机器1上:
这条命令是将卷组oracle设为不可用状态
注意这里不要理解为导出,实际上这个命令是从源系统中注销卷组。 在机器2上:
在机器2上注册卷组oracle
激活卷组oracle,这样硬盘就从一台机器移动到另一台机器了。 注意:如果在你的发行版中运行vgimport命令没有在/etc/lvm/backup目录下创建LV信息备份文件,需要手动运行vgcfgbackup命令来备份。 整个流程如下图所示: ◆转移到LV 这里转移的意思是从现有的普通分区模式转移到用LV管理分区的模式,如我在安装系统时/home文件系统的大小我设为1G,现在发现空间快被填满了,打算增加/home大小,按照以前的管理模式,实现起来非常麻烦,而且数据丢失风险较大,下面我就其转移为以LV管理模式进行举例说明。 首先要清楚一点,这个转移不是类似从ext2转换到ext3的过程,它需要几个步骤: 1、增加一个新分区,假设是/dev/hda6,大小2G 2、将该分区转为物理卷,通过命令pvcreate实现
3、创建卷组home_dir,并将hda6加入该卷组
4、创建逻辑卷home_dir
5、创建挂载点
6、创建文件系
7、挂载逻辑卷
8、拷贝源/home目录下的所有内容
9、重命名源/home名称
10、卸载home_dir
11、重命名home_dir
12、挂载新的/home
13、如果不出现故障,可以将/home_old删除
至此,就将原来固定分区大小管理的/home转移到用LV管理的/home了,以后再遇到空间不足的情况就可以使用动态增加空间的功能增加其大小了。 ◆一些注意事项 1、/boot不能使用LV,系统启动时还来不及加载LV驱动,造成系统启动失败。 2、增加或减少LV空间大小时,保险起见要先umount文件系统,再执行增加或减少命令,那么根文件系统使用LV时就不应该做增大或变小操作,因为无法umount根文件系统,即使强制做了也可能会造成系统启动失败。 3、创建卷组时必须要指定名称,创建逻辑卷时可以不指定名称,默认以LogVol00开始命名。 4、创建逻辑卷时一定要指定空间大小,即-L参数,默认不是使用全部的vg空间。 5、如果mount逻辑卷时提示必须指定文件系统类型,多半是因为还没有创建文件系统,即还没有使用mkfs.ext3之类的命令。 6、在执行命令时多仔细看其返回的信息,LVM命令通常能够返回非常易懂的信息,在解决故障时非常有用。 写在最后,这篇文章中的命令已经有点过期了,但是不影响你对lvm的理解! |
Submitted by admin on 2010, December 8, 6:38 PM
7.6.2 创建LVM卷
首先,用fdisk命令创建存储设备的物理分区,供创建逻辑分区之用。我们用的是一款32 MB的U盘,设备名为/dev/sdb:
- # fdisk /dev/sdb 启动管理磁盘分区的命令
- Command (m for help): p 显示当前分区(未分区)
- Disk /dev/sdb: 32 MB, 32112128 bytes
- 1 heads, 62 sectors/track, 1011 cylinders
- Units = cylinders of 62 * 512 = 31744 bytes
- Device Boot Start End Blocks Id System
- Command (m for help): n 创建新分区
- Command action
- e extended
- p primary partition (1-4)
- p 设置成主分区
- Partition number (1-4): 1 指定为分区1
- First cylinder (2-1011, default 2): Enter
- Using default value 2
- Last cylinder or +size or +sizeM or +sizeK (2-1011, default 1011): Enter
- Using default value 1011
- Command (m for help): t 指定分区类型
- Selected partition 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): p 键入p查看新建分区
- Disk /dev/sdb: 32 MB, 32112128 bytes
- 1 heads, 62 sectors/track, 1011 cylinders
- Units = cylinders of 62 * 512 = 31744 bytes
- Device Boot Start End Blocks Id System
- /dev/sdb1 2 1011 31310 8e Linux LVM
继续下一步操作之前,先确认对相应分区的修改正确无误。如果一切妥当,则写入新分区表,如下所示:
- Command (m for help): w
- The partition table has been altered!
- Calling ioctl() to re-read partition table.
- Syncing disks.
- #
回到shell提示符,使用sfdisk命令查看U盘分区情况:
- # sfdisk -l /dev/sdb 查看LVM分区
- Disk /dev/sdb: 1011 cylinders, 1 heads, 62 sectors/track
- Units = cylinders of 31744 bytes, blocks of 1024 bytes, counting from 0
- Device Boot Start End #cyls #blocks Id System
- /dev/sdb1 1 1010 1010 31310 8e Linux LVM
- /dev/sdb2 0 - 0 0 0 Empty
- /dev/sdb3 0 - 0 0 0 Empty
- /dev/sdb4 0 - 0 0 0 Empty
下一步,将/dev/sdb1制作成新的LVM物理卷,并使用pvs命令查看物理LVM卷相关信息:
- # pvcreate /dev/sdb1 将sdb1制作成LVM物理卷
- Physical volume "/dev/sdb1" successfully created
- # pvs 查看物理LVM分区
- PV VG Fmt Attr PSize PFree
- /dev/sdb1 vgusb lvm2 a- 28.00M 20.00M
- 下面使用vgcreate创建vgusb卷组,并列出当前活跃的卷组:
- $ vgcreate vgusb /dev/sdb1 创建vgusb卷组
- Volume group "vgusb" successfully created
- $ vgs 查看当前卷组
- VG #PV #LV #SN Attr VSize VFree
- vgusb 1 0 0 wz--n- 28.00M 28.00M
使用lvcreate在vgusb卷组里新建一个10M大小的LVM分区。然后,用lvs查看逻辑卷,用vgs查看空闲空间的大小变化:
- $ lvcreate --size 10M --name lvm_u1 vgusb
- Rounding up size to full physical extent 12.00 MB
- Logical volume "lvm_u1" created
- $ lvs 查看逻辑卷信息
- LV VG Attr LSize Origin Snap% Move Log Copy%
- lvm_u1 vgusb -wi-a- 12.00M
- $ vgs 发现卷组仍有16M空闲空间
- VG #PV #LV #SN Attr VSize VFree
- vgusb 1 1 0 wz--n- 28.00M 16.00M
使用mkfs.ext3命令在lvm分区上创建ext3文件系统,示例如下:
- $ mkfs.ext3 /dev/mapper/vgusb-lvm_u1
- mke2fs 1.38 (30-Jun-2005)
- Filesystem label=
- OS type: Linux
- Block size=1024 (log=0)
- Fragment size=1024 (log=0)
- 3072 inodes, 12288 blocks
- 614 blocks (5.00%) reserved for the super user
- First data block=1
- Maximum filesystem blocks=12582912
- 2 block groups
- 8192 blocks per group, 8192 fragments per group
- 1536 inodes per group
- Superblock backups stored on blocks:
- 8193
- Writing inode tables: done
- Creating journal (1024 blocks): done
- Writing superblocks and filesystem accounting information: done
- This filesystem will be automatically checked every 35 mounts or
- 180 days, whichever comes first. Use tune2fs -c or -i to override.
至此,ext3文件系统创建完毕,该LVM卷已准备就绪。
Submitted by admin on 2010, December 1, 5:47 PM
一、单用户模式;
单用户模式要求我们输入root用户的密码,否则您无法登录单用户模式;如果您丢失了root用户的密码,并不能用单用户模式来重设您的root密码;
另外单用户模式还有一个前提是您的grub 或者lilo 是能正常工作的;并且您知道您的系统问题发生在哪里,当以单用户模式登录时,您能打开文件系统的写操作,然后进行您想要进行的系统修复;
可能有的弟兄会说“我真的不知道系统哪块出了问题”,呵,如果真的不知道,那我也无能为力了,因为本文档主要讲述登录模式,并不是讲述如何修复系统的;
1、以grub 系统引导管理器,单用户登录方法;
在grub 启动后,移动键盘到Linux的启动项;按e键;然后再移动键盘到类似下面的一行,也就是kernel的那行:
kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/1 rhgb quiet
把光标移动这行后,再按一下e键,进入编辑这行;在行尾条一个空格 ,然后输入 linux single,也就是类似如下的:
kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/1 rhgb quiet linux single
结束编辑,按回车返回;
接着我们要启动系统,按一下b键启动;
当进入单用户模式运行后,系统提示我们输入root密码;输入正确后会进入系统;您可以用df -h 来查看文件系统挂载位置等,也可以用fdisk -l 来查看分区等;但对文件系统的写操作,可能还要看下面的;
单用户进入系统后,可能系统是只读的;要运行下面的命令;
#mount -o remount,rw /
2、lilo 引导管理器单用户模式;
在boot:处输入
linux single
当进入单用户模式运行后,系统提示我们输入root密码;输入正确后会进入系统;您可以用df -h 来查看文件系统挂载位置等,也可以用fdisk -l 来查看分区等;但对文件系统的写操作,可能还要看下面的;
单用户进入系统后,可能系统是只读的;要运行下面的命令;
#mount -o remount,rw /
二、linux rescue 修复模式;
Linux的修复模式就是 linux rescue;修复模式并不需要系统密码,当进入修复模式后,系统会提示我们要挂载哪个分区上的文件系统,我们根据自己的系统情况来选择就就是了。登录完成后,系统也会提示所在分区的文件系统会被挂载到哪个目录;如果您不知道挂载在哪里,请通过 df -h 来查看;
修复模式需要安装盘的第一张或独立的修复盘;比如 Fedora 就有专门的修复盘;其实修复盘在一定意义上来说类似livecd,是不需要安装到硬盘也能运行系统;然后通过mount 来挂载文件系统;其实当我们执行linux rescue 时,象Fedora 这类的系统,会有一些提示,比如他提示他要mount 哪个分区,我们选择一下就行了;
执行修复模式时,需要以下几个步骤;
其一:在BIOS中,设置首个启动驱动器为CDROM;
其二;找出系统安装盘的第一张;放入CDROM ;当光盘运行时,会提示安装的界面;
在boot:后面输入 linux rescue ,然后按回车;
boot:linux rescue
进入修复模式,我们能做些什么呢??什么都可以做,比如挂载usb盘进行数据备份;修改系统中的配置文件... ... 重新设置root密码、挂载文件系统 ... ... 只要能想到,大多都可以完成;
三、跨越控制台登录;
真正的跨越控制台登录是不需要输入root密码的,如果您把root密码丢失,就要想到跨越控制台登录;我们前面所说的linux rescue 从本质上来说,就是跨越控制台登录,因为无需要密码验证就能登录系统;
跨越控制台登录主要包括:借grub和lilo 跨越控制台登录; linux rescue 模式;第三方livecd 系统和第三方Linux系统;
1、通过grub和lilo 引导,跨越控制台登录;
1)如果您用的是grub进行系统引导;
在grub 启动后,移动键盘到Linux的启动项;按e键;然后再移动键盘到类似下面的一行,也就是kernel的那行:
kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/1 rhgb quiet
把光标移动这行后,再按一下e键,进入编辑这行;在行尾条一个空格 ,然后输入 linux single,也就是类似如下的:
kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/1 rhgb quiet linux init=/bin/bash
结束编辑,按回车返回;
接着我们要启动系统,按一下b键启动;
可能系统是只读的;要运行下面的命令;
#mount -o remount,rw /
然后我们可以通过 df -h 来查看文件系统的加载情况;既然都把文件系统挂载了,有什么活干不了的呢?重设root密码,备份文件... ...
比如重设root密码;
#passwd
2)如果您用lilo 进行系统引导;
在boot:处输入
boot:linux init=/bin/bash
当进入系统后,您可以用df -h 来查看文件系统挂载位置等,也可以用fdisk -l 来查看分区等;但对文件系统的写操作,可能还要看下面的;
可能系统是只读的;要运行下面的命令;
#mount -o remount,rw /
2、linux rescue ;
请参考前面第二点所说的修复模式;
3、借linux的livecd光盘 或第三方linux系统;
linux的livecd版本是无需安装的linux 系统,在光盘上就可以运行的linux 系统; livecd 大多是用来修复之用,livecd 集成了常用的系统操作工具;
第三方Linux系统是指你的机器上安装一个以上的Linux系统,如果其中一个发生问题,我们就可以用另一个来修复;
livecd 和第三方linux系统来修复已经被破坏的Linux ,常用的工具有mount 和chroot等等 ;如果您只是简单的更改存在问题的系统文件,用mount 就足够了。chroot 工具可以改变/,进而进入另一个系统,这个工具的确有用。
我们还是举个例子来说明如何通过用mount和chroot;
至于机器中第三方Linux和Livecd的使用比较简单,这里就不多说了;
livecd就是在光盘上运行的linux ,您可以找一个livecd的发行版本刻录一下就能用了,使用简单方便;
下载地址:
http://www.frozentech.com/content/livecd.php
常用的有 SLAX,Knoppix,Damn Small Linux,Ubuntu ... ...
大体都差不多,下载一个小的备用也行,就看您怎么用了;
通过livecd linux 或其它linux 来修复已经破坏的Linux步骤如下:
1)mount 挂载文件系统;
注:执行mount 及chroot时,要以root权限运行,以下同;
比如存在问题的系统位于 /dev/hda5 ,如果您不知道哪个分区是linux的,您可以通过fdsik -l 来查看;
[root@localhost ~]# fdisk -l 注:查看分区情况;
[root@localhost ~]# pwd 注:确定当前工作目录;
/root 注:当前工作目录为/root
[root@localhost ~]# mkdir systmp 注:在当前工作目录下创建一个临时目录;
[root@localhost ~]# mount /dev/hda5 systmp/ 注:挂载hda5到tmpsys目录中;
[root@localhost ~]# df -h 注:查看是否已经挂载;
Filesystem 容量 已用 可用 已用% 挂载点
/dev/hda8 11G 9.8G 581M 95% /
/dev/shm 236M 0 236M 0% /dev/shm
/dev/hda5 7.9G 5.9G 2.0G 76% /root/systmp 注:看好了,是挂载到了/root/systmp目录中;
既然把/dev/hda5分区的文件系统已经挂载了,我们就能对已经挂载的文件系统进行写操作;如果是简单的备份和文件修改,是完全能行的;
注意:在写操作的过程中,要倍加不心,在操作某个文件的时候,要先备份;当出现不能mount的情况,可能是您的当前所用的内核不支持相应的文件系统;如果系统要求指定文件系统的时候,请看如下的例子;
mount -t 文件系统类型 磁盘分区 挂载目的目录
对于linux的文件系统类型主要有:reiserfs,ext3,ext2;具体用什么文件系统类型,你最明白;如果您还是不知道,就一个一个的尝试;比如我的hda5是reiserfs的,可以用下面的命令来挂载;
[root@localhost ~]# mount -t reiserfs /dev/hda5 systmp/
2)chroot 到已经挂载的文件系统;
chroot这个工具很有用,很多Linux都支持chroot切换到另一个文件系统中,然后进行一系列系统包的安装和系统配置;这并不是说任何文件系统都能chroot切入 ,首先这个文件系统中得具备系统运行的一定的工具和环境,比如/bin和/sbin 目录是拥有等....
用中文表达不清楚,还是举例来说明;
比如我的机器中有两个Linux系统,一个运行正常,另一个有点问题(比如是root密码忘记了),我想通过正常的系统来修复另一个;首先我们进行的是mount ,也就是前面所说的,然后下一步就是chroot ;通过chroot 切换到要修复的文件系统中;
比如存在问题的系统位于 /dev/hda5
[root@localhost ~]# fdisk -l
[root@localhost ~]# pwd
/root
[root@localhost ~]# mkdir systmp
[root@localhost ~]# mount /dev/hda5 systmp/
[root@localhost ~]# df -h
Filesystem 容量 已用 可用 已用% 挂载点
/dev/hda8 11G 9.8G 581M 95% /
/dev/shm 236M 0 236M 0% /dev/shm
/dev/hda5 7.9G 5.9G 2.0G 76% /root/systmp
[root@localhost ~]# chroot systmp 注:chroot到hda5分区的系统中;
bash-3.00# 注:已经登录;
bash-3.00# df -lh 注:查看文件系统挂载情况;
Filesystem 容量 已用 可用 已用% 挂载点
/dev/hda5 7.9G 5.9G 2.0G 76% /
proc 7.9G 5.9G 2.0G 76% /proc
sysfs 7.9G 5.9G 2.0G 76% /sys
上面我们就通过chroot 命令完成了通过一个系统到另一个系统的跨控制台登录;Livecd 如果要完成此任务,也是通过这样过程完成的。
我们既然已经登录到有问题的系统了,可以进行相应的修复工作,比如对root密码的恢复,软件包的安装,相应文件的修改... ... 我想您应该知道怎么做,对不对???
有些发行版的安装盘类似livecd ,比如slackware 的安装盘的第一张,当他启动到让你输入用户名和密码进行安装时,我们不必输入什么,或者直接输入root ,就能进入cdrom 虚拟环境了;这时我们就用前面所说mount加载文件系统,然后chroot挂载的文件系统;
四、后记; 正在写文件系统的管理,可能要花几天时间;努力之中;
五、关于本文;
看到论坛的弟兄还在大呼丢了root密码怎么恢复,虽然坛里也有不少文档,但大多没有形成系统,为了解决问题而重写此文,可能有的弟兄需要这样的文档;既然有“市场”,我就写,没有什么大不了的;有的弟兄认为是小题大作,就当我锻炼身体好了;这样的文档谁都会写,没有什么难的;