工作,学习,生活,这里将会有一些记录. 备用域名:http://meisw.wdlinux.cn 注册 | 登陆
浏览模式: 标准 | 列表全部文章

Linux 系统在单用户模式,修复模式,跨控制台登录在系统修复中的运用(转)

一、单用户模式;

单用户模式要求我们输入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密码怎么恢复,虽然坛里也有不少文档,但大多没有形成系统,为了解决问题而重写此文,可能有的弟兄需要这样的文档;既然有“市场”,我就写,没有什么大不了的;有的弟兄认为是小题大作,就当我锻炼身体好了;这样的文档谁都会写,没有什么难的;

linux 下制作二进制 .bin 的文件

制做方法是使用cat 命令将执行脚本和打包文件同时放到一个.bin的文件里
这样安装的时候只要使用一个包,直接执行该包即可安装完毕,简单方便。
例:制作安装apache、mysql的安装脚本包
1.将源码包先打包
#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz

2.编写脚本如下:
# cat install.sh
#!/bin/bash
dir_tmp=/root/installapache
mkdir $dir_tmp
sed -n -e '1,/^exit 0$/!p' $0 > "${dir_tmp}/packages.tar.gz" 2>/dev/null
cd $dir_tmp
tar zxf packages.tar.gz
tar jxf httpd-2.0.63.tar.bz2
cd  httpd-2.0.63
./configure --prefix=/tmp/apache2
make
make install
cd $dir_tmp
tar zxf mysql-5.0.33.tar.gz
cd mysql-5.0.33
./configure --with-charset=gbk --with-extra-charsets=binary,latin1,gb2312 --localstatedir=/home/db --with-mysqld-ldflags=-all-static -enable-assembler --with-innodb --prefix=/tmp/mysql5
make
make install
exit 0


#cat install.sh packages.tar.gz >install.bin

这样就生成install.bin的安装文件,改文件是由shell脚本和二进制合成的。前半部分是脚本后半部分是二进制文件,用strings等二进制查看命令可以看到
最主要的是下面这句,是将二进制文件从.bin文件里分离出来
sed -n -e '1,/^exit 0$/!p' $0 > "${dir_tmp}/packages.tar.gz" 2>/dev/null

安装的时候直接执行
sh install.bin
安装这个方法可以将我们平时常使用的安装脚本化,然后打包。以后使用就方便了。

xen hypervm

虽说hypervm在年中的时候由于安全漏洞引起了轩然大波,但做为免费的VPS管理工具,还是很方便的。自己注意一些安全配置,也应该无大障。另外,目前hypervm已经开源,相信未来会更光明的。

hypervm的安装还是很简单的,下面是官方的命令说明:

 

  • $ setenforce 0
  • $ wget http://download.lxcenter.org/download/hypervm/production/hypervm-install-master.sh
  • $ sh ./hypervm-install-master.sh –virtualization-type=xen/openvz/NONE
  • You have to explicitly specify which virtualization type you want using the option –virtualization-type as either xen or openvz or NONE. If you want to install hypervm on an existing system, just use virtualization-type=NONE, which will install just hyperVM components, and skip the virtualization componetns entirely. When you run the command, you will presented with a menu from up2date, on which you can press <Enter>
    值的一提的是,hypervm安装时会下载一些的操作系统的安装模板,下载时间会比较长,如果暂时不需要这些模板,可以通过在安装命令行加入skip-ostemplate参数。比如:

    # sh ./hypervm-install-master.sh –virtualization-type=openvz –skip-ostemplate=true

     

    --------------------------------------

    HyperVM安装手记(XEN篇)

    http://download.lxlabs.com/?software=hypervm选择下载需要的安装脚本(master的地址为http://download.lxlabs.com/download/hypervm/production/hypervm-install-master.sh),在服务器上运行sh ./hypervm-install-master.sh –virtualization-type=xen
    安装过程是会自动完成的,但在这之前,需要先将需要的虚拟化软件装好。安装完HyperVM后init 6重启,然后通过浏览器访问http://<server address>:8888就能操作虚拟机了。
    需要注意的是,HyperVM需要一个未建立分区的LVM卷来存放XEN虚拟机,并且这个操作要在安装HyperVM之前完成,虽然可以在安装后通过管理界面添加,但那比较麻烦。
    对于fedora 6/centos 5,其xen安装可能会有些后遗症,因此,在这些系统中安装完HyperVM后应根据http://lxlabs.com/software/hypervm/install-xen/中的方法对系统进行一些调整。
    推荐一个建立LVM卷的方法:http://book.51cto.com/art/200909/149041.htm

    ---------------------------------------

    HyperVM安装手记(OpenVZ篇)

    首先要说一说OpenVZ的安装
    cd /etc/yum.repos.d
    wget http://download.openvz.org/openvz.repo
    yum install ovzkernel

    即可完成安装。重启后,从
    http://download.lxlabs.com/?software=hypervm选择下载需要的安装脚本(master的地址为http://download.lxlabs.com/download/hypervm/production/hypervm-install-master.sh),在服务器上运行sh ./hypervm-install-master.sh –-virtualization-type=openvz
    安装过程是会自动完成的,安装完HyperVM后init 6重启,然后通过浏览器访问http://<server address>:8888就能操作虚拟机了。

    最后,推荐个关于OpenVZ安装的页面http://linux.chinaunix.net/docs/2006-11-13/3187.shtml

    shell的字符替换

    变量替换:
    一:简单赋值和替换
    a=bcd
    $ echo $a  
    bcd
    $ echo ${a}
    bcd

    二:变量扩充
    除了shell中的meta,其它的[^a-zA-Z0-9_]几乎都可以作单词边界。
    同sed中关于单词边界[^a-zA-Z0-9_]的描述。
    http://bbs.chinaunix.net/forum/24/20040825/393964.html
    这些功能有时候会在程序中有意想不到的作用!
    例如:
    $ a=bcd
    $ echo ${a}.b
    bcd.b
    $ echo $a.php
    bcd.php
    $ echo $a%b
    bcd%b
    $ echo /$a/bc
    /bcd/bc
    对于shell中的meta字符,则backslash。
    $ echo $a\*b
    bcd*b

    三:变量中的变量
    $ a=bcd
    $ b=efg
    $ c=$a$b
    $ echo $c
    bcdefg
    $ d=$c.ghi
    $ echo $d
    bcdefg.ghi

    思考:若变量互相嵌套,会怎样呢?

    四:变量的特异功能
    到网中人的啦!(ps:重写真是没激情啊)
    file=/dir1/dir2/dir3/my.file.txt
    我们可以用 ${ } 分别替换获得不同的值:
    ${file#*/}:从变量file的字符串左边开始,删除字符直到第一个“/”:dir1/dir2/dir3/my.file.txt
    ${file##*/}:从变量file的字符串左边开始,删除字符直到最后一个“/”:my.file.txt
    ${file#*.}:从变量file的字符串左边开始,删除字符直到第一个“.”:file.txt
    ${file##*.}:从变量file的字符串左边开始,删除字符直到最后一个“.”:txt

    其实,在“#”后面,无非就是一个匹配问题,不限于两个,你可以放任意个字符,还可以用shell中另外的通配符“?”“[…]”“[!…]”,例如:
    $ echo ${file#????}
    1/dir2/dir3/my.file.txt
    $ echo ${file#*[0-9]}
    /dir2/dir3/my.file.txt
    $ echo ${file#/dir1/dir[0-9]}
    /dir3/my.file.txt

    “#”:相当于最小匹配,遇到一个最小的符合其后表达式的字符串(单个或多个)即中止匹配动作;
    “##”:相当于最大匹配,它尽可能的匹配更多的字符。
    我们可以拿“*”来说明:  
    *  在shell中表示匹配任何符号包括空。当它在只有一个 # 的变量替换中,受最小匹配的影响,它不会匹配任何可打印字符,只匹配一个空,也就是什么也不匹配,你完全可以忽略它的存在;
    当在有两个 ## 的变量替换中,受最大匹配的影响,一个 * 表示匹配整个字符串。
    如果想匹配字符“*”时,要在“*”前加一个“\”,其后的“*”失去通配符的功能。
    但是还有一种例外情况(请接着看)


    例:
    $ file2=abcd.efgh.ijkl.oopp
    $ echo ${file2#*.*.*.*}
    $ echo ${file2##*.*.*.*}

    想想上面两个的输出是什么?
    $ echo ${file2#*.*.*.*}
    oopp
    $ echo ${file2##*.*.*.*}

    ??知道为什么吗?因为:“*”匹配任何符号包括空。遇到一个“#”时,最后一个“*”就匹配“空”去了。看下面的:
    $ echo ${file2#*.*.*.?}
    opp
    $ echo ${file2#*.*.*.?*}
    opp
    $ echo ${file2##*.*.*.?}
    opp
    $ echo ${file2##*.*.*.?*}

    do you know?

    $ echo $file3
    *ab*de*cd
    看看下面将输出什么?
    $ echo ${file3#*ab}      
    *de*cd
    $ echo ${file3#**}
    *ab*de*cd
    $ echo ${file3##**}

    $ echo ${file3#\*ab}
    *de*cd
    $ echo ${file3#\**}
    ab*de*cd
    $ echo ${file3##\**}

    $ echo ${file3#*a}
    b*de*cd
    $ echo ${file3#\*a}
    b*de*cd

    不知各位有没有发现,“*”在一个“#”中时,并不一定代表“空”,它可能代表一个字符“*”也可能代表其他的什么字符,如上例的:
    “$ echo ${file3#*a}”输出为“b*de*cd”,其实这还是符合最小匹配理论的。这个表达式的意思是:从变量file3的字符串左边开始删除字符,直到遇到第一个字符“a”。所以不要和“$ echo ${file3#\*a}”混淆,虽然两个结果是一样,但意思是不一样的。

    再举几个例子,相信大家更容易理解这段话:
    $ echo $file3
    *ab*de*cd*ab*de                     //注意:出现两个“*ab”
    $ echo ${file3#*a}
    b*de*cd*ab*de                         //删除字符,直到出现第一个“a”,“*”为通配符
    $ echo ${file3##*a}
    b*de                                           //删除字符,直到出现第二个“a”,“*”为通配符
    $ echo ${file3##\*a}
    b*de*cd*ab*de                         //删除字符串“*a”,“*”在“\”表示字符“*”

    除了通配符“*”比较难理解一点,其他的shell通配符就都很容易了。

    至于“%”,和“#”不同的地方,就是从变量字串右部开始。
    ${file%/*}:从右部开始拿掉字符,直到遇到(从右部数起的)第一个“/” :/dir1/dir2/dir3
    ${file%%/*}:从右部开始拿掉字符,直到遇到(从右部数起的)最后一个“/”:(空值)
    ${file%.*}:从右部开始拿掉字符,直到遇到(从右部数起的)第一个“.”:/dir1/dir2/dir3/my.file
    ${file%%.*}:从右部开始拿掉字符,直到遇到(从右部数起的)最后一个“.”:/dir1/dir2/dir3/my
    单匹配格式${var/被替换字符/替换字符}
    全匹配格式${var//被替换字符/替换字符}
    例子:
    [test]# echo ${ip/./@}
    324@2354.329.5324
    [test]# echo ${ip/./,}
    324,2354.329.5324
    [test]# echo ${ip/./ }
    324 2354.329.5324
    [test]# echo ${ip//./ }
    324 2354 329 5324
    [test]# echo ${ip//./,}
    324,2354,329,5324
    [test]# echo ${ip//./@}
    324@2354@329@5324
    总结一点结果.${}中:
    /代表字符串的替换.
    :代表字符串的提取.
    #和%公别代表左截和右截.

    linux大硬盘分区parted

    linux大硬盘分区parted

    我们来看一下两种分区表
    MBR
    分区表:(MBR含义:主引导记录)
    所支持的最大卷:2T T; terabytes,1TB=1024GB
    对分区的设限:最多4个主分区或3个主分区加一个扩展分区(扩展分区中支持无限制的逻辑驱动器)

    GPT
    分区表:(GPT含义:GUID分区表)
    支持最大卷:18EB,(Eexabytes,1EB=1024TB
    每个磁盘最多支持128个分区

    假设要用parted/dev/sdb(大小为6000G)进行分区操作:

    1
    、进入系统执行:
    #parted /dev/sdb

    2
    、建立磁盘label

    mklabel GPT

    3
    、按p键,查看磁盘可用空间,显示单位为M6000G应该显示大致

    : /dev/sdb 的磁盘几何结构:0.000-6000000.000 兆字节

    4
    、创建分区:
    (parted)后输入:
    mkpart
    并按照提示操作

    分区类型? primary/主分区/extended/扩展分区? p (如果要创建扩展分区 此处
    输入e
    文件系统类型? [ext2]? (这里直接回车,分区创建完毕后通过mkfs.ext3
    /dev/sdb*
    建立文件系统)
    起始点?0
    结束点?-1

    5
    、按p键查看刚创建的分区是否已经成功。

    6
    、如果成功,键入quit退出parted

    7
    、使用mkfs.ext3 /dev/sdb1 来创建文件系统

     
    fdisk
    命令虽然很交互,操作也方便,但是对于大于2T的磁盘无法操作,如果我们想用大于2T的磁盘怎么办?可以把磁盘转化为GPT格式。
     

    GPT
    格式的磁盘相当于原来MBR磁盘中原来保留4partition table4*16个字节只留第一个16个字节,类似于扩展分区,真正的partition table512字节之后,GPT磁盘没有四个主分区的限制。


    fdisk不支持GPT,我们可以使用parted来对GPT磁盘操作。

    parted
    功能很强大,既可用命令行也可以用于交互式


    在提示符下输入parted就会进入交互式模式,如果有多个磁盘的话,我们需要运行select sdx x为磁盘,来进行磁盘的选择

    parted>

    parted>select sdb               
    假设磁盘为sdb

    parted>mklable gpt              
    MBR磁盘格式化为GPT

    parted>mklable msdos            
    GPT磁盘转化为MBR磁盘

    parted>mkpart primary 0 100     
    划分一个起始位置为0大小为100M的主分区

    parted>mkpart primary 100 200   
    划分一个起始位置为100M大小为100M的主分区

    parted>print                    
    打印当前分区

     

    parted里边不支持ext3的文件系统,所以如果要使用的话,要退出parted进行格式话

    mkfs.ext3 /dev/sdx1

    因为fdisk是不支持GPT磁盘,所以不要使用fdisk -l来查看X磁盘刚才分好的区,看不到的。


    命令行的模式:
    将硬盘转化为GPT磁盘后,执行下列命令

    parted /dev/sdx mkpart primary 0 100  
    划分一个起始位置为0大小为100M的主分区

    Acronym for GUID Partition Table

    GPT was introduced for iA64 systems, to get around a fixed 32 bit issue (2 to the power of 32 is 4 billion times a 512 byte block equals 2 Terabytes) in the PC-BIOS Partition table. Partitions larger than 2 TB require using a GPT disklabel, which differs from the PC-BIOS Partition table in a number of ways:

        * Is easily extensible.
        * Can contain up to 128 primary partitions, as opposed to 4, so there's no need for extended partitions.
        * Allows Partitions larger than 2 TB.
        * Identifies Partitions with a GUID so you can reference that Partition even if disks are moved around.
        * Identifies Partition type with a GUID, thus avoiding the type conflicts that plague the PC-BIOS Partition table format.
        * Provides a 46(?) character UTF-16 partition label to identify Partitions.
        * Has a "fake" MBR for backwards compatibility.
        * Includes a CRC32 to detect corrupt Partition tables.
        * Stores a backup Partition table at the end of the disk.

    Most partitioning tools under Linux will fail to do anything sensible with a > 2 TB Partition. As of this writing, parted(8) is the only one that understands them and will let you set the GPT label on the disk.

    There is a lot of information stating that you cannot boot off a GPT enabled device. Most of the claims imply that the fault is with LILO or GRUB not understanding GPT devices. We've not tested this, but GPT and traditional MBRs will coexist.

    See also:

        * Disk Sectors on GPT Disks from the MS Knowledge Base

    所以在超过2TB,我不能使用交互很好的Fdisk命令,只能磁盘转化为GPT格式。由于GPT格式的磁盘相当于原来MBR磁盘中原来保留4 partition table4*16个字节只留第一个16个字节,其它的类似于扩展分区,真正的partition table512字节之后,所以对GPT磁盘表来讲没有四个主分区的限制。

    GPT磁盘分区表进行操作,我们要使用parted命令。其实parted功能很强大,它可以象fdisk一样既可用命令行也可以用于交互式.
    下面我们就来实际操作吧,在提示符下输入parted就会进入交互式模式

    #  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
    MBR磁盘格式化为GPT

    (parted) mkpart primary 0 100
    划分一个起始位置为0大小为100M的主分区

    (parted) mkpart primary 100 200
    划分一个起始位置为100M大小为100M的主分区

    (parted)  mkpart  primary  0  -1

    划分所有空间到一个分区

    (parted)  print
    打印当前分区

    (parted)  quit

    可能还会用到的一些命令

    (parted) mklable msdos
    如果要反过来.GPT磁盘转化为MBR磁盘

    在这样分完分区后,还要使用mkfs.ext3来进行格式化
    #partprobe
    #mkfs.ext3 -F /dev/sdb1

    记的哦,因为fdisk是不支持GPT磁盘,所以使用fdisk -l来查看磁盘刚才的分区是没有用的.

    命令行的模式:

    将硬盘转化为GPT磁盘后,执行下列命令

    parted /dev/sdx mkpart primary 0 100
    ##
    划分一个起始位置为0大小为100M的主分区

     

    parted /dev/sdb
    p
    mklabel gpt
    GPT
    mkpart primary 0 -1
    mkfs.ext3 /dev/sdb1

    《关于linux下tc限速的代码》的说明(转)

    首先说明下,在写脚本时,记得要用vi写,其它的文本编辑器不要用,因为会出来许多不知名的字符。

    个人认为在vi中输入(:set nu)显示行号,更加适合编辑。

    如果eth1网卡上用来上外网,eth2是用来作内网共享上网。tc只能控制发送的数据量所以要写下载的话,只能写在eth2网卡上。

    一,先记得清空eth2旧有队列,再作根队列进行绑定这个网卡

    tc qdisc del dev eth2 root
    tc qdisc add dev eth2 root handle 2: htb default 20

    注:这里有一个默认就是选择2:20

    二,作根类

    tc class add dev eth2 parent 2:0 classid 2:1 htb rate 100kbit

    这里也作了根类的限速,所以共享所能拥有的网速100k。这里的k可不是我们平时用的k,100kbit大概只能提供12k的下载速度,也就是如同我们拉了一根10M的光纤,实际下载的速度只有1.2M。这个关系也就是除个8这样。

    注:htb是Hierarchy Token Bucket的缩写。通过在实践基础上的改进,它实现了一个丰富的连接共享类别体系。HTB可以通过TBF(Token Bucket Filter)令牌桶过滤器实现带宽限制,也能够划分类别的优先级。

    三,作子类

    tc class add dev eth2 parent 2:1 classid 2:50 htb rate 50kbit ceil 50kbit
    tc class add dev eth2 parent 2:1 classid 2:100 htb rate 100kbit ceil 100kbit
    tc class add dev eth2 parent 2:1 classid 2:20 htb rate 20kbit ceil 20kbit

    这三个子类,都进行了限速而且不能借速,如果rate 128kbit ceil 384kbit 速率是128kbit,最高是384kbit,也就是它能借用(384-128)kbit ,但是这里有一点ceil的值最高可不能大于根类的大小。

    四,作队列

    tc qdisc add dev eth2 parent 2:50 handle 50: sfq perturb 10

    tc qdisc add dev eth2 parent 2:100 handle 100: sfq perturb 10

    tc qdisc add dev eth2 parent 2:20 handle 20: sfq perturb 10

    这里的sfq perturb 10还可能是以下的几种形式:

    第一种:[p|b]fifo先进先出只有一个参数:limit. pfifo是以数据包的个数为单位;bfifo是以字节数为单位。如:pfifo limit 2

    第二种:red是Random Early Detection(随机早期探测)的简写。如果使用这种QDISC,当带宽的占用接近于规定的带宽时,系统会随机地丢弃一些数据包。它非常适合高带宽应用。

    第三种:sfq是Stochastic Fairness Queueing(随机公平队列)的简写。是公平队列算法家族中的一个简单实现.它的精确性不如其它的方法,但是它在实现高度公平的同时,需要的计算量却很少。只有当你的出口网卡确实已经挤满了的时候,SFQ才会起作用,SFQ会频繁地改变散列算法,这也是公平的一个方面。sfq的perturb参数指多少秒后重新配置一次散列算法.如果取消设置,散列算法将永远不会重新配置(不建议这样做).10秒应该是一个合适的值:如tc qdisc add dev eth0 parent 2:10 handle 10: sfq perturb 10

    第四种:tbf是Token Bucket Filter(令牌桶过滤器)的简写,适合于把流速降低到某个值。这个参数参考tc命令及参数

    五,过滤器

    tc filter add dev eth2 protocol ip parent 2:0 prio 1 u32 match ip dst 192.168.1.50/32 flowid 2:50
    tc filter add dev eth2 protocol ip parent 2:0 prio 1 u32 match ip dst 192.168.1.100/32 flowid 2:100
    tc filter add dev eth2 protocol ip parent 2:0 prio 3 u32 match ip dst 192.168.1.0/24 flowid 2:20

    这里用u32的过滤器

    还有一种是fw形式的过滤器,fw的写法
    tc filter add dev eth0 parent 1:0 protocol ip prio 1 handle 1 fw classid 1:11

    另个还得在iptables 作fw标志。

    一般出外网时才会用fw规则,因为内部IP地址在经过外网卡时会进行NAT,所以不能用源地址进行U32匹配,只能是FW规则进行流量标识。

    iptables -A PREROUTING -t mangle -i eth2 -s 192.168.1.200/32 -j MARK --set-mark 1

    iptables -A PREROUTING -t mangle -i eth2 -s 192.168.1.172/32 -j MARK --set-mark 1

    iptables -A PREROUTING -t mangle -i eth2 -s 192.168.1.82/32 -j MARK --set-mark 1

    tc filter add dev eth1 parent 1:0 protocol ip prio 3 handle 1 fw classid 1:20

    iptables mark后的值也就是tc fw前的值

    但是prio优先级一定不能相同,否则fw规则将失效

    因为我没有做上传限速,所以没有用到fw.

    这里有没有看到ip的形式是192.168.1.82/32 和192.168.1.0/24。前者表示192.168.1.82这样一个ip,后者却是表示192.168.1这样的一个整个c段的网络地址。

    这里的ip不能写成192.168.1.25-82(想表示的意思是从192.168.1.25到192.168.1.82这里的所有ip)。我用了很多的方法,都做不到。如果要这样做的话,我只能用shell里做一个循环。

    IPS=2#起始
    IPE=253#结束

    COUNTER=$IPS
    while [ $COUNTER -le $IPE ]

    do
    语句 $COUNTER
    COUNTER=` expr $COUNTER + 1 `
    done

    还有规则是提到的ip的电脑一起共用所设带宽

    配置vsftp支持ssl

    ftp传输数据是明文,弄个抓包软件就可以通过数据包来分析到账号和密码,为了搭建一个安全性比较高ftp,可以结合SSL来解决问题
     
    SSL(Secure Socket Layer)工作于传输层和应用程序之间.作为一个中间层,应用程序只要采用SSL提供的一套SSL套接字API来替换标准的Socket套接字,就可以把程序转换为SSL化的安全网络程序,在传输过程中将由SSL协议实现数据机密性和完整性的保证.SSL取得大规模成功后,IETFSSL作了标准化,并将其称为TLS(Transport Layer Security).Ftp结合SSL,将实现传输数据的加密,保证数据不被别人窃取
     
     
    让vsftpd支持SSL,必须让OPENSSL≥0.9.6版本,还有就是本身vsftpd版本是否支持
    查询vsftpd软件是否支持SSL
    [root@localhost vsftpd]# ldd /usr/sbin/vsftpd |grep libssl
            libssl.so.6 => /lib/libssl.so.6 (0xf7f27000)   ==è说明此版本支持
    如没有输出libssl.so.6 => /lib/libssl.so.6 (0xf7f27000)类似文本,说明此vsftpd版本不支持SSL


    openssl req -x509 -nodes -days 365 -newkey rsa:1024 \-keyout /etc/vsftpd/vsftpd.pem \-out /etc/vsftpd/vsftpd.pem  ==è生成vsftpd.pem 证书

    vi /etc/vsftpd/vsftpd.conf  ==è编辑主配置文件,添加以下参数ssl_enable=YES
    allow_anon_ssl=NO
    force_local_data_ssl=YES
    force_local_logins_ssl=YES
    ssl_tlsv1=YES
    ssl_sslv2=NO
    ssl_sslv3=NO
    rsa_cert_file=/etc/vsftpd/vsftpd.pem
    service vsftpd restart

    下面是ssl参数一些定义,根据自己需求去修改
    ssl_enable=yes/no             //是否启用 SSL,默认为no
    allow_anon_ssl=yes/no         //是否允许匿名用户使用SSL,默认为no
    rsa_cert_file=/path/to/file       //rsa证书的位置
    dsa_cert_file=/path/to/file      //dsa证书的位置
    force_local_logins_ssl=yes/no    //非匿名用户登陆时是否加密,默认为yes
    force_local_data_ssl=yes/no     //非匿名用户传输数据时是否加密,默认为yes
    force_anon_logins_ssl=yes/no    //匿名用户登录时是否加密,默认为no
    force_anon_data_ssl=yes/no     //匿名用户数据传输时是否加密,默认为no
    ssl_sslv2=yes/no               //是否激活sslv2加密,默认no
    ssl_sslv3=yes/no                //是否激活sslv3加密,默认no
    ssl_tlsv1=yes/no                //是否激活tls v1加密,默认yes
    ssl_ciphers=加密方法            //默认是DES-CBC3-SHA

     

    php页面跳转的三种方法详解

    1.第一种:
     <?php
    header("Location: htto://www.wdlinux.cn");
    ?>
    2.第二种:
    和javascrīpt结合起来
      echo   "<script   language=javascript>"; 
      echo "location.href='www.wdlinux.cn';";
      echo   "</script>";
    3.第三种:
    echo("<meta http-equiv='refresh'content=0;URL='http://www.wdlinux.cn'>");