工作,学习,生活,这里将会有一些记录. 备用域名:http://meisw.51099.com 注册 | 登陆
浏览模式: 标准 | 列表2010年08月的文章

Linux CentOS上安装XEN及虚拟机转

 

 

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

举例:安装一个半虚拟化客户机,512MB 内存,5G 磁盘,通过使用http提供的安装树,要求使用 text-only 模式。

# virt-install --paravirt --name rhel5u4 --ram 512 --file /var/lib/xen/images\/rhel5u4.img -file-size 6 --nographics --location http://192.168.0.254/rhel5u4

以下是一些安装命令的举例:

#virt-install --name rhel5u4 --ram 512 --file=/var/lib/libvirt/images/rhel5u4 \
.img --file-size=3 --vnc --cdrom=/var/lib/libvirt/images/rhel5u4.iso --network\ \network=default

#virt-install -p -n rhel5u4 -r 512 -f /var/lib/libvirt/images/rhel5u4.img -s 3 \ –vnc --cdrom=/var/lib/libvirt/images/rhel5u4 .iso -w network=default

#virt-install -p -n rhel5u4 -r 512 -f /var/lib/libvirt/images/rhel5u4.img -s 3\
–vnc -l http://192.168.0.254/rhel5u4 -w network=default

#virt-install -p -n rhel5u4 -r 512 -f /var/lib/libvirt/images/rhel5u4.img -s 3 \
–vnc --location=http://192.168.0.2/rhel5u4 -x ks=http://192.168.122.1/ks.cfg -w \
network=default

#virt-install -p -n rhel5u4 -r 512 -f /var/lib/libvirt/images/rhel5u4 .img -s 3 \
--vnc -l http://192.168.0.254/rhel5u4 ---extra-args='ks=http://192.168.122.1 \
ks.cfg' -w network=default

常用参数介绍:

-n NAME, --name=NAME             指定 Guest 名字

-r MEMORY, --ram=MEMORY          指定内存大小

 -u UUID, --uuid=UUID            指定 uuid 号
                                 可以使用 uuidgen 命令来产生 uuid:
                                 # uuidgen
                                 a89a3751-3555-4be5-8157-5e205ddba5bb
                                 或者使用如下命令:
                                 # echo 'import virtinst.util ; print\
                                 virtinst.util.uuidToString(virtinst.util.randomUUID())' | python
                                 4217ef56-b0d9-071d-6157-c98d0e6d240a
--vcpus=VCPUS           指定虚拟机的 CPU 数量

 -p, --paravirt         指定客户机为半虚拟化 Guest

 -f DISKFILE, --file=DISKFILE     虚拟机的虚拟磁盘,磁盘可以是文件、磁盘分区或者是

                                  lvm。此选项用来指定虚拟磁盘的路径
-s DISKSIZE, --file-size=DISKSIZE      指定虚拟磁盘的大小,单位是 G;如果—file 指定

                                       的文件路径不存在,并且—nonsparse 选项没有指
                                       定,对这个文件不会预先分配存储空间。
-w NETWORK, --network=NETWORK     NETWORK 有三种选择,bridge:BRIDGE ,

                                       network:NAME 和 user
-c CDROM, --cdrom=CDROM           指定用于全虚拟化 Guest 的虚拟 CD,可以是一个 ISO 镜
                                  像文件,也可以是一个 CDROM 设备,也可以是一个通
                                  过 URL 可以访问和获取到的 boot.iso 镜像。如果将其忽
                                  略,那么在—location 选项中必须指定 kernel 和 initrd
                                  的位置,也可以使用—pxe 参数通过网络进行安装。
--pxe                             使用 PXE boot 协议来加载初始化的 ramdisk 和 kernel,
                                  以便于启动 Guset 段的安装进进程。如果没有指定—pxe,那么
                                  就必须指定—cdrom 和--location 其中一个。
-l LOCATION, --location=LOCATION   指定 kernel 和 initrd 的安装源,这对于半虚拟化是
                                   必须的。对于全虚拟化,要么使用--location 要么使用
                                   --cdrom 来指定 ISO 或 CDROM 镜像。其必须符合下面的
                                   四种格式:
                                   DIRECTORY
                                   nfs:host:/path
                                   http://host/path
                                   ftp://host/path
-x EXTRA, --extra-args=EXTRA      用来给加载的 kernel 和 initrd 提供额外的内核命令行参
                                  数。
(跟详细的参数及使用方法详见 man virt-install)

XEN是目前Linux上的最佳的虚拟化解决方案,特别适合于服务器应用,如用于将多个服务器合并到一台物理服务器上,以节省运营成本(机房空间、电力消耗);或者是出于安全角度的考虑,需要将不同的应用进行分区,以便降低安全风险等。

名词:
完全虚拟化(Full Virtualization):full virtualized
半虚拟化(Para Virtualization):paravirtualized

查看CPU对虚拟化的支持程度:
Intel和AMD的半虚拟化支持标识 - PAE
# cat /proc/cpuinfo | grep flags
flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss nx constant_tsc pni ssse3

Intel全虚拟化支持标识 - VMX
# cat /proc/cpuinfo | grep flags
flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc up pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm

AMD全虚拟化支持标识 - SVM
# cat /proc/cpuinfo | grep flags
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8legacy 3dnowprefetch ts fid vid ttp tm stc 100mhzsteps

XEN的运行环境:Domain-0与Domain-U
Domain-0即虚拟母机或称为宿主机,与Linux主机为同一系统,以XEN的Linux内核启动的主机,负责管理和控制客户机。
Domain-U即虚拟客户机或称VPS,在Domain-0上可以建立多个虚拟客户机。
Domain-0与Domain-U的区别就是Domain-0是虚拟机,Domain-U是虚拟机上的操作系统。用过Windows上VMWare的可以把Domain-0理解为VMWare软件,Domain-U则是运行在VMWare上的操作系统。

XEN的运行方式:
XEN分成多个层级 (layer) 执行。它将Linux的核心修改后,再使用修改过的核心开机,而开机后先载入XEN的监控器 (Hypervisor) , 并且启动第一个操作系统,称为domain-0。在Xen上面所谓的一个domain就是指一个虚拟机。

Domain-0之所以要先被载入是因为Domain-0含有其他虚拟机启动所必须的控制指令,并且domain-0也是控制虚拟装置的重要主控系统。在domain-0上最重要的就是一个xend的常住进程,其他的domain都是由这个xend来管理的。至於命名方面,除了domain-0之外的其他虚拟机就依序被称为domain-1, domain-2等等, 我们统称为domain-U。

Domain-0是很重要的,因为它直接控制Xen的监控器(Hypervisor),而且掌握了真实的Linux驱动程序 (drivers)。而其他的虚拟机(domain-U)则是透过Xen监控器来与真实的硬件以及domain-0进行交互。为了让domain-0能够与Xen结合,我们必须要修改domain-0的核心才能顺利运行。并且需要使用domain-0的核心来开机才可以。domain-0是所有虚拟机的基础,所以它可以尽量简洁,其他的个别服务则可以放置到不同的domain中。

xend可以管理domain-0与其他domain之间的启动与交互,提供一个终端控制 (console) 界面来让 domain-0 登入其他的 domain。

XEN的安装:
在CentOS(5.4)上安装XEN
首先确认XEN是否已经安装
# yum grouplist
如果Virtualization位于Available Groups而非Installed Groups里则说明XEN并未安装在系统中

安装命令有两种,任选其一,效果是一样的
安装方式一
# yum -y install xen <开始安装XEN>
安装方式二
# yum groupinstall Virtualization -y <开始安装XEN>

安装完成后编辑/etc/grub.conf修改开机启动顺序,将default=1修改为改default=0,以XEN的Linux核心为默认启动系统

安装完成,重启。

运行
# xm list
Name                                      ID Mem(MiB) VCPUs      State   Time(s)
Domain-0                                   0      491        2          r-----   7797.5
显示以上内容表示安装无误,Domain-0正常启动运行。

安装客户机 - Domain-U:
半虚拟化安装客户机操作系统CentOS(5.4)

首先为虚拟机创建磁盘并进行格式化

创建磁盘:
# dd if=/dev/zero of=/home/vm01 bs=4096 seek=1024k count=0

参数说明:
if 文件输入位置
of 创建磁盘文件
bs 设置磁盘大小
seek 描述 bs 每一块的单位
count 复制的块数

将磁盘文件格式化为ext3文件格式:
# mkfs -t ext3 /home/vm01

关闭防火墙使用NFS作为安装源:
一般防火墙是默认打开的,如果防火墙已经打开且开放了NFS服务则不需要关闭防火墙
# /etc/init.d/iptables stop <关闭防火墙>

挂载操作系统:
# mkdir /tmp/os
# mount /dev/cdrom /tmp/os

启动NFS服务:
# service nfs start

开放NFS服务的目录:
编辑 /etc/exports 添加一行 /tmp/os         192.168.1.*(ro) ,注意根据个人情况修改IP
激活
# exportfs -rv

开始安装:
#virt-install -n domain01 -r 512 --vcpus=2 -p -f /home/vm01 --nographics -l /tmp/os
进入安装选项->选择语言->选择NFS方式安装->选择IPV4 DHCP ->输入主机ip[192.168.1.1]->输入目录[/tmp/os]
选择TEXT安装模式,以后的安装过程和正常安装CentOS没有区别

安装程序参数列表:
-n 设置虚拟主机名
-r 设置虚拟主机内存 这里设置的是512M
--vcpus 设置cpu个数
-f 设置虚拟主机的磁盘位置
--nographics 不使用图形界面安装
-l 设置系统安装源的位置
-p 半虚拟化客户机
-c 用于全虚拟化的虚拟CD,可以是一个ISO镜像文件或CDROM设备或URL可以访问的boot.iso镜像

将虚拟主机加入开机自动启动:
# chkconfig --add xendomains
# ln -s /etc/xen/domain01 /etc/xen/auto/domain01 <放在auto目录中的虚拟主机会开机自启动>

xendomains服务器的启动/停止/重启/状态查询命令:
一般的情况下,xend服务器启动了,xendomains也会自动启动。

# /etc/init.d/xend start 启动xend
# /etc/init.d/xend stop 停止xend
# /etc/init.d/xend restart 重启xend
# /etc/init.d/xend status 查看xend状态

# /etc/init.d/xendomains start 启动xendomains
# /etc/init.d/xendomains stop 停止xendomains
# /etc/init.d/xendomains restart 重启xendomains
# /etc/init.d/xendomains status 查看xendomains状态

XEN控制虚拟主机的常用命令:
虚拟主机列表
# xm list

关闭虚拟主机,domain01为虚拟主机名,也可用id代替
# xm shutdown domain01

启动一个虚拟主机,domain01为虚拟主机名
# xm create domain01

通过-c 参数调用 console 启动并跟踪虚拟主机状态
# xm create domain01 -c

显示虚拟机的控制台
# xm console domain01

重起虚拟机
# xm reboot domain01

销毁并立即停止虚拟机,类似关掉电源一样关机
# xm destroy domain01

存储正在运行的虚拟操作系统的状态
# xm save domain01 <File>

唤醒虚拟操作系统
# xm restore <File>

暂停正在运行的虚拟操作系统
# xm pause domain01

激活停止的虚拟操作系统
# xm unpause domain01

调整虚拟平台/虚拟操作系统的占用内存
# xm mem-set domain01  128

调整虚拟平台及虚拟操作系统的虚拟CPU个数
# xm vcpu-set domain01 2

查看虚拟系统运行的状态
# xm top

# xentop

常见错误描述及解决办法

通过http或NFS安装客户机操作系统出现 Unable to retrieve 错误:....
多数原因是防火墙造成的,如果使用http安装方式时可以先停止防火墙,也可以采用以下方式解决
通过/etc/init.d/iptables status命令查询是否有打开80端口
或通过 sudo netstat -antup  命令查看网络端口状态
修改vi /etc/sysconfig/iptables添加以下代码开放80端口:
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
执行 /etc/init.d/iptables restart 激活操作

出现类似下面的错误:
POST operation failed: xend_post: error from xen daemon: (xend.err 'Error creating domain: I need 262144 KiB, but dom0_min_mem is 262144 and shrinking to 262144 KiB would leave only 244672 KiB free.')
说明新增的虚拟主机内存设置过高了,需要调小些

nginx discuz7.2伪静态

rewrite ^(.*)/archiver/((fid|tid)-[\w\-]+\.html)$ $1/archiver/index.php?$2 last;
rewrite ^(.*)/forum-([0-9]+)-([0-9]+)\.html$ $1/forumdisplay.php?fid=$2&page=$3 last;
rewrite ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/viewthread.php?tid=$2&extra=page%3D$4&page=$3 last;
rewrite ^(.*)/profile-(username|uid)-(.+)\.html$ $1/viewpro.php?$2=$3 last;
rewrite ^(.*)/space-(username|uid)-(.+)\.html$ $1/space.php?$2=$3 last;
rewrite ^(.*)/tag-(.+)\.html$ $1/tag.php?name=$2 last;

CentOS 挂载NTFS

CentOS5.5下挂载ntfs文件系统

 
 
1)打开http://www.tuxera.com/community/ntfs-3g-download/ 查看并下载latest stable version  如wget http://tuxera.com/opensource/ntfs-3g-2010.8.8.tgz

2)安装./configure && make && make install

3)挂载mount -t ntfs-3g /dev/sda2 /data/ntfs/
4)编辑/etc/fstab
   mount -t ntfs-3g /dev/sda2 /data/ntfs/
 
----------------------------------
之前有记录过centos挂载ntfs的过程,不过现在CentOS已经更新到5.4了
回头看了一下之前写的仍然停留在5.2 且是没更新内核的版本上
装完5.3  2.6.18-128.el5PAE 昨晚花了一个晚上的时间更新到5.4   2.6.18-164.6.1.el5PAE
经过一番整理 安装了ntfs-3g 来挂载ntfs文件系统,记录过程如下

首先安装Priorities 插件:
yum install yum-priorities
编辑/etc/yum/pluginconf.d/priorities.conf 档 确认下列行存在,以确定yum-priorities插件被启用:
[main]
enabled=1
编辑/etc/yum.repos.d/ 内的CentOS-Base.repo 档 并加入 下列行:
priority=N
建议设定:
[base], [addons], [updates], [extras] ... priority=1
[centosplus],[contrib] ... priority=2

第二步 下载并安装RPMforge 套件
建议使用下列链接
#i386 http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
#x86_64 http://apt.sw.be/redhat/el5/en/x86_64/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
安装DAG的GPG-KEY
rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
审核下载的套件:
rpm -K rpmforge-release-0.3.6-1.el5.rf.*.rpm
安装套件:
rpm -i rpmforge-release-0.3.6-1.el5.rf.*.rpm

测试:
yum check-update(这个出现的内容不定)
也可以通过安装一个软件来测试:
yum install mplayer


第三步  安装NTFS-3G 软件
先确定正确安装了rpmforge 套件,然后安装下列套件:
yum install fuse fuse-ntfs-3g
若rpmforge的设置为停用,则使用如下命令:
yum --enablerepo=rpmforge install fuse fuse-ntfs-3g

最后 就开始挂载ntfs 档案系统了
1)建立挂载点,进入 /mnt 目录   建立 新目录 win
2)普通挂载:
#mount -t ntfs-3g /dev/sda5 /mnt/win
3)也可以编辑 /etc/fstab 后挂载:
a)只读:/dev/sda5    /mnt/win   ntfs-3g  ro,umask=0222,defaults 0 0
b)读写:/dev/sda5    /mnt/win   ntfs-3g  rw,umask=0000,defaults 0 0
然后进行挂载:
mount /mnt/win
即可。
4)通过  umount /mnt/win  卸载文件系统

参考文档:
http://wiki.centos.org/zh-tw/TipsAndTricks/NTFS
 
--------------------------------

安装CENTOS NTFS支持
1. 查看自己系统的内核版本
#uname -a

#uname -r

2. 找合适自己系统内核和CPU的NTFS模块下载:
比如我的:kernel-module-ntfs-2.6.18-53.el5

google搜索,找到后下载.
我在http://sourceforge.net/project/showfiles.php?group_id=13956页面找到
http://jaist.dl.sourceforge.net/ … 0.rr.10.11.i686.rpm

3. 安装
运行rpm -ihv kernel-module-ntfs-2.6.18-53.el5-2.1.27-0.rr.10.11.i686.rpm,安装此RPM包。
运行/sbin/modprobe ntfs加载内核模块。
运行dmesg | grep NTFS,可以查看NTFS驱动版本。显示
[root@localhost src]# dmesg | grep NTFS
NTFS driver 2.1.27 [Flags: R/W MODULE].
可以运行cat /proc/filesystems看到已经支持ntfs文件系统了。
出现
nodev autofs
ntfs
表示已经支持ntfs了!

4. 挂载分区
(1).fdisk -l查看分区信息
Disk /dev/hda: 80.0 GB, 80000000000 bytes
255 heads, 63 sectors/track, 9726 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/hda1 * 1 1912 15358108+ 7 HPFS/NTFS
/dev/hda2 1913 9725 62757922+ f W95 Ext’d (LBA)
/dev/hda5 1913 4462 20482843+ b W95 FAT32
/dev/hda6 4463 7012 20482843+ 7 HPFS/NTFS
/dev/hda7 7013 7025 104391 83 Linux
/dev/hda8 7026 9725 21687718+ 8e Linux LVM

(2).建立挂载目录
mkdir /mnt/c
mkdir /mnt/d
mkdir /mnt/e

(3).Mount windwos下的所有分区
ntfs 用 mount -t ntfs /dev/hda6 /mnt/c
vfat 用 mount -t vfat /dev/hda5 /mnt/d

使用df -h查看是否被mount上来

(4).设置启动自动挂载分区
修改/etc/fstab
添加如下信息:
/dev/hda1 /mnt/c ntfs umask=000,nls=utf8
/dev/hda5 /mnt/d vfat umask=000,nls=utf8
/dev/hda6 /mnt/e ntfs umask=000,nls=utf8
重启下试下吧!

5.卸载NTFS模块
rpm -qa|grep -i ntfs 查看所安装的版本
rpm -e kernel-module-ntfs-2.6.18-53.el5-2.1.27-0.rr.10.11.i686
即可卸载。

 

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

下载内核源码:

http://downloads.lustre.org/public/kernels/rhel5/

解压并移动到/usr/src/

tar -jxvf linux-2.6.18-164.el5.tar.bz2

mv linux-2.6.18-164 /usr/src/

cd /usr/src

备份出当前的.config

make oldconfig

使用vi, 把所有 =y 和 =m 的项修改为 is not set

1,$s/=y/ is not set/g

1,$s/=m/ is not set/g

设置修改CONFIG_NTFS_FS

CONFIG_NTFS_FS=m

修改fs/ntfs/aops.c

@@ -415,7 +415,7 @@ retry_readpage:
/* Is the page fully outside i_size? (truncate in progress) */
if (unlikely(page->index >= (i_size + PAGE_CACHE_SIZE – 1) >>
PAGE_CACHE_SHIFT)) {
-        zero_user_page(page, 0, PAGE_CACHE_SIZE, KM_USER0);
+        zero_user(page, 0, PAGE_CACHE_SIZE);
ntfs_debug(“Read outside i_size – truncated?”);
goto done;
}

修改fs/ntfs/compress.c

@@ -565,7 +565,7 @@ int ntfs_read_compressed_block(struct pa
if (xpage >= max_page) {
kfree(bhs);
kfree(pages);
-        zero_user_page(page, 0, PAGE_CACHE_SIZE, KM_USER0);
+        zero_user(page, 0, PAGE_CACHE_SIZE);
ntfs_debug(“Compressed read outside i_size – truncated?”);
SetPageUptodate(page);
unlock_page(page);

然后可以在/usr/src/linux-2.6.18-164/目录下编译了

make modules SUBDIRS=/usr/src/linux-2.6.18-164/fs/ntfs/ (make modules,再cp)

把编译好的模块加入到内核中去

insmod /usr/src/linux-2.6.18-164/fs/ntfs/ntfs.ko

modprobe ntfs [或者是这个?]

使用命令载入NTFS分区的硬盘

mount -t ntfs /dev/sdb4 /mnt/hdd

Finished

使用以下命令查看状态

dmesg | grep NTFS

cat /proc/filesystems

但是这种方法在我的FreeAgentGo上面老是只能mount为只读状态, 会有很多error, 所以还是使用ntfs-3g最好..虽然速度慢了点

http://wiki.centos.org/zh/TipsAndTricks/NTFS

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

早上发现我的macbook pro从深度休眠恢复的死机了,用disk utils验证了一下,报了几个卷错误,大师、彤彤都说很可能是硬盘有坏扇区了。估计又悲剧了。赶快作time machine。手头的300G的移动硬盘满了,需要转移一下数据到测试服务器上。
测试服务器是centos5.4 ,执行uname -pr  看了一下内核是 2.6.18-164.el5 x86_64。
http://www.linux-ntfs.org/doku.php
http://sourceforge.net/projects/linux-ntfs/files/Kernel%20NTFS%20Module
都没找到对应的内核版本的文件系统,估计是还没出来吧。
想起来还可以用ntfs-3g或者fuse。
http://www.tuxera.com/community/ntfs-3g-download/下在最新版本的,

一路
#./configure
#make
#make install

然后

fdisk -l

找到ntfs的移动硬盘

mkdir -p /mnt/myusb


mount -t ntfs-3g /dev/sdb1 /mnt/myusb

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

默认RHEL5.4、CentOS5.4是不支持NTFS的,即使读取也不行,不过Fedora 11默认已经支持读写操作ntfs文件系统了,今天来分享下让RHEL、CentOS5。4支持NTFS 读取一记.

此次让Linux支持ntfs的原理是给内核增加支持ntfs的模块驱动,于是我先下载模块.

一.支持NTFS模块安装

为了正常安装,建议还是先用uname -r 查询下内核版本是2.6.18-164.el5,找了一下,没有找到完全匹配的,只能是选一个最近的kernel-module-ntfs-2.6.18-128.1.1.el5-2.1.27-0.rr.10.11.i686.rpm,注意哦,这里还要注意32位和64位的区分.

  • 2.安装rpm包

rpm -ivh kernel-module-ntfs-2.6.18-128.1.1.el5-2.1.27-0.rr.10.11.i686.rpm

  • 3.安装模块

find / -name ntfs 找到了ntfs模块的安装目录/lib/modules/2.6.18-128.1.1.el5/kernel/fs/ntfs,进入该目录,执行insmod ntfs.ko.

  • 4.就可以执行挂载命令了.

注:1.此法是给内核安装了个支持ntfs的驱动

 

二.此法对ntfs分区仅有只读的权限,如需支持读写需要安装ntfs-3g

实质:安装ntfs-3g

1.下载ntfs-3g

注意不是越新越好,我提供的这个版本就行

2.编译安装

[root@blinux ~]#./configure
[root@blinux ~]#make
[root@blinux ~]#make install

3.挂载ntfs分区,以ntfs-3g格式

 先卸载ntfs挂上的分区

[root@blinux ~]#umount /dev/sdb1

再以ntfs-3g格式挂载
[root@blinux ~]#mount -t ntfs-3g  /dev/sda1  /mnt/c
同理,挂载D,E也一样。

三,让其开机自动挂载
#vi /etc/fstab
在最后添加:

/dev/sda1 /mnt/c ntfs umask=000,nls=utf8
/dev/sda5 /mnt/d ntfs umask=000,nls=utf8
/dev/sda6 /mnt/e ntfs umask=000,nls=utf8
建议编辑完/etc/fstab文件后,执行mount -a 命令,检测挂载是否成功,否则有可能你开不了机。


至此,就可以通过查看 /mnt/c /mnt/d /mnt/e
来访问C D E了!

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

URL

http://www.linux-ntfs.org/doku.php?id=downloads

 

RAID资料

RAID是“Redundant Array of Independent Disk”的缩写,中文意思是独立冗余磁盘阵列。冗余磁盘阵列技术诞生于1987年,由美国加州大学伯克利分校提出。简单地解释,就是将N台硬盘通过RAID Controller(分Hardware,Software)结合成虚拟单台大容量的硬盘使用。RAID的采用为存储系统(或者服务器的内置存储)带来巨大利益,其中提高传输速率和提供容错功能是最大的优点。另外,raid还有杀虫剂品牌,法国特警队伍名,游戏专有名词等义项。

http://baike.baidu.com/view/7102.htm

sed 指定行范围匹配

sed -n '5,10{/pattern/p}' file

sed是一个非交互性性文本编辑器,它编辑文件或标准输入 导出的文件拷贝。标准输入可能是来自键盘、文件重定向、字符串或变量,或者是一个管道文件。sed可以随意编辑小或大的文件,有许多sed命令用来编辑、 删除,并允许做这项工作时不在现场。sed一次性处理所有改变,因而变得很有效,对用户来说,最重要的是节 省了时间sed必须通过行号和正则表达式指定要改变的文本行

sed怎样读取数据:
sed从文件的一个文本行或从标准输入的几种格式中读取数据,将之拷贝到一个编辑缓冲区,然后读命令行或脚本的第一条命令,并使用这些命令查找模式或定位 行号编辑它,重复过程直到命令结束

sed命令的调用:
在命令行键入命令;将sed命令插入脚本文件,然后调用sed;将sed命令插入脚本文件,并使sed脚本可执行
sed [option] sed命令 输入文件            在命令行使用sed命令,实际命令要加单引号
sed [option] -f sed脚本文件 输入文件     使用sed脚本文件
sed脚本文件 [option] 输入文件            第一行具有sed命令解释器的sed脚本文件
option如下:
n 不打印; sed不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑),p命令可以用来打印编辑行
c 下一命令是编辑命令,使用多项编辑时加入此选项
f 如果正在调用sed脚本文件,使用此选项,此选项通知sed一个脚本文件支持所用的sed命令,如
sed -f myscript.sed input_file  这里myscript.sed即为支持sed命令的文件
使用重定向文件即可保存sed的输出

使用sed在文本中定位文本的方式:
x       x为一行号,比如1
x,y     表示行号范围从x到y,如2,5表示从第2行到第5行
/pattern/    查询包含模式的行,如/disk/或/[a-z]/
/pattern/pattern/   查询包含两个模式的行,如/disk/disks/
/pattern/,x  在给定行号上查询包含模式的行,如/disk/,3
x,/pattern/  通过行号和模式查询匹配行,如 3,/disk/
x,y!    查询不包含指定行号x和y的行

基本sed编辑命令:
p      打印匹配行                      c\    用新文本替换定位文本
=      显示文件行号                    s     使用替换模式替换相应模式
a\     在定位行号后附加新文本信息        r     从另一个文本中读文本
i\     在定位行号后插入新文本信息        w     写文本到一个文件
d      删除定位行                      q     第一个模式匹配完成后退出或立即退出
l      显示与八进制ASCII代码等价的控制字符        y  传送字符
n      从另一个文本中读文本下一行,并附加在下一行   {}     在定位行执行的命令组
g      将模式2粘贴到/pattern n/

基本sed编程举例:
使用p(rint)显示行: sed -n '2p' temp.txt   只显示第2行,使用选项n
打印范围:  sed -n '1,3p' temp.txt         打印第1行到第3行
打印模式:  sed -n '/movie/'p temp.txt     打印含movie的行
使 用模式和行号查询:  sed -n '3,/movie/'p temp.txt   只在第3行查找movie并打印
显示整个文件:  sed -n '1,$'p temp.txt      $为最后一行
任意字符:  sed -n '/.*ing/'p temp.txt     注意是.*ing,而不是*ing
打印行号:  sed -e '/music/=' temp.txt
附加文本:(创建sed脚本文件)chmod u+x script.sed,运行时./script.sed temp.txt
#!/bin/sed -f
/name1/ a\             #a\表示此处换行添加文本
        HERE ADD NEW LINE.     #添加的文本内容
插入文本:
/name1/ a\ 改成 4 i\ 4表示行号,i插入
修改文本: /name1/ a\ 改 成 /name1/ c\ 将修改整行,c修改
删除文本: sed '1d' temp.txt  或者 sed '1,4d' temp.txt
替 换文本: sed 's/source/OKSTR/' temp.txt     将source替换成OKSTR
sed 's/\$//g' temp.txt             将文本中所有的$符号全部删除
sed 's/source/OKSTR/w temp2.txt' temp.txt 将替换后的记录写入文件temp2.txt
替换修改字符串: sed 's/source/"ADD BEFORE" &/p' temp.txt
结果将在source字符串前面加上"ADD BEFORE",这里的&表示找到的source字符并保存
sed结果写入到文件: sed '1,2 w temp2.txt' temp.txt
sed '/name/ w temp2.txt' temp.txt
从文件中读文本: sed '/name/r temp2.txt' temp.txt
在每列最后加文本: sed 's/[0-9]*/& Pass/g' temp.txt
从 shell向sed传值: echo $NAME | sed "s/go/$REP/g"   注意需要使用双引号

快速一行命令:
's/\.$//g'         删除以句点结尾行
'-e /abcd/d'       删除包含abcd的行
's/[][][]*/[]/g'   删除一个以上空格,用一个空格代替
's/^[][]*//g'      删除行首空格
's/\.[][]*/[]/g'   删除句号后跟两个或更多的空格,用一个空格代替
'/^$/d'            删除空行
's/^.//g'          删除第一个字符,区别  's/\.//g'删除所有的句点
's/COL/(...\)//g'  删除紧跟COL的后三个字母
's/^\///g'         删除路径中第一个\

 

sed '1{:a;N;6!ba};N;${P;Q};D'
awk '{a[NR%7]=$0}END{print a[(NR-6)%7]}'

从性能上来讲,倒数几行的问题,还是用tail的好
tail -7 | head -1

 

http://fbirdzp.blogbus.com/logs/62624803.html

http://sed.sourceforge.net/sed1line_zh-CN.html

 

awstats处理昨天日志数据的问题

awstats做日志分析里,如果apache的日志文件按天生成,在用awstats处理时,是处理当天的,所以必需在12点前处理,但要想在零晨处理,需要改动下,如

YD=`date --date='yesterday' "+%Y%m%d"`
LogFile="/www/servers/apache/logs/access_log.$YD"

 

下面转

 

 

我们需要给awstats指定一个标识昨天的日志文件,awstats可以通过-LogFile参数来指定,可以写一个脚本来完成这个功能,然后定期的执行该脚本,脚本的代码如下:

yesterday=`date –date=’yesterday’ "+%y%m%d"`
LogFile="/home/iislog/www.szshequ.com/W3SVC87257621/ex$yesterday.log"
/usr/lib/cgi-bin/awstats.pl -update -LogFile=$logfile -config=www.szshequ.com

首先获取昨天的日期(格式为:090114),然后组合成日志文件名传递给awstats。最后将定期执行的命令修改成这个脚本的路径即可,如下:

00 03 * * * root /home/awstats/脚本.sh

对于大量日志文件需要分析,可以这样做,譬如日志文件从07年2月7号到现在:

 

 

先算出中间天数为708天,

#!/bin/bash
for((i=708;i>0;i–))
do
echo `date -d ‘-’$i’ day’ "+%y%m%d"`

        done
for11.sh (END)
sh fo11r.sh >>/home/for
生成文件for,

 

root@ubuntu8110:/home# less for
070207
070208

090113
090114
(END)

root@ubuntu8110:/home# less for.sh
for i in `cat for`
do
LogFile="/home/iislog/www.qmediatech.com/W3SVC1137541015/ex$i.log"
/usr/lib/cgi-bin/awstats.pl -update -LogFile=$LogFile -config=www.qmediatech.com
done
for.sh (END)

运行脚本即可自动把708天日志自动分析完毕。
注意需要在配置文件awstats.www.qmediatech.com.conf 注释掉日志路径

 

00 03 * * * root /usr/share/doc/awstats/examples/awstats_updateall.pl -awstatsprog=/usr/lib/cgi-bin/awstats.pl now 使用awstats_updateall.pl把所有CONF配置的域名一次性更新

root@ubuntu8110:/etc/awstats# pwd
/etc/awstats
root@ubuntu8110:/etc/awstats# ls
awstats.admin.szshequ.com.conf   awstats.images.szshequ.com.conf
awstats.agent.szshequ.com.conf   awstats.my.szshequ.com.conf
awstats.all.pp.szshequ.com.conf awstats.pp.szshequ.com.conf
awstats.bbs.szshequ.com.conf     awstats.shop.szshequ.com.conf
awstats.club.szshequ.com.conf    awstats.wap.szshequ.com.conf
awstats.conf.111                 awstats.www.szshequ.com.conf
awstats.conf.local               awstats.yh.szshequ.com.conf
awstats.cost.szshequ.com.conf    common.cof.111
awstats.files.szshequ.com.conf   conf
awstats-icon

 


另外一种方法,就是直接在awstats的配置文件指定参数

# Example: "C:/WINNT/system32/LogFiles/W3SVC1/ex%YY-24%MM-24%DD-24.log"
配置文件为:

LogFile="/home/iislog/admin.szshequ.com/W3SVC1061345589/ex%YY-24%MM-24%DD-24.log"
LogFile="/home/iislog/agent.szshequ.com/W3SVC239483299/ex%YY-24%MM-24%DD-24.log"

ip_conntrack: table full, dropping packet.

/etc/sysctrl.conf
net.ipv4.ip_conntrack_max = 81920
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 1500

 

可调整以下参数:echo 180 >/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established

  echo 6553600 >/proc/sys/net/ipv4/netfilter/ip_conntrack_max

  echo 120 >/proc/sys/net/ipv4/neigh/default/gc_stale_time

  echo 10240 >/proc/sys/net/ipv4/neigh/default/gc_thresh1

  echo 40960 >/proc/sys/net/ipv4/neigh/default/gc_thresh2

  echo 81920 >/proc/sys/net/ipv4/neigh/default/gc_thresh3或vi /etc/sysctl.conf

  net.ipv4.ip_conntrack_max=6553600

  net.ipv4.netfilter.ip_conntrack_max=6553600

  net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=120

  net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=60

  net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=120

  net.ipv4.neigh.default.gc_thresh1=10240

  net.ipv4.neigh.default.gc_thresh2=40960

  net.ipv4.neigh.default.gc_thresh3=81920

  net.core.rmem_default = 2097152

  net.core.rmem_max=16777216

  net.core.wmem_max=16777216

  net.core.wmem_default = 2097152再sysctl -p相关参数说明:ARP支持一个sysctl接口,可以用以配置全局参数或逐个网络接口地进行配制。该sysctl可以通过/proc/sys/net/ipv4/neigh/*/*文件或者使用sysctl(2)接口来访问。系统中每个接口都在/proc/sys/net/ipv4/neigh/.中有自己的目录。`default'目录中的设置用于所有新建的设备。sysctl相关的时间是以秒为单位,除非特别声明过.

  anycast_delay

  对IPv6相邻请求信息的回复的最大延迟时间;目前还不支持anycast。缺省值为1秒。

  app_solicit

  这是在使用多路广播探测(multicast probe)前,经过网络连接送到用户间隙ARP端口监控程序的探测(probe)最大数目(见mcast_solicit)。缺省值为0。

  base_reachable_time

  一旦发现相邻记录,至少在一段介于base_reachable_time/2和3*base_reachable_time/2之间的随机时间内,该记录是有效的。如果收到上层协议的肯定反馈,那么记录的有效期将延长。缺省值是30秒。

  delay_first_probe_time

  发现某个相邻层记录无效(stale)后,发出第一个探测要等待的时间。缺省值是5秒。

  gc_interval

  收集相邻层记录的无用记录的垃圾收集程序的运行周期,缺省为30秒。

  gc_stale_time

  决定检查一次相邻层记录的有效性的周期。当相邻层记录失效时,将在给它发送数据前,再解析一次。缺省值是60秒。

  gc_thresh1

  存在于ARP高速缓存中的最少层数,如果少于这个数,垃圾收集器将不会运行。缺省值是128。

  gc_thresh2

  保存在ARP高速缓存中的最多的记录软限制。垃圾收集器在开始收集前,允许记录数超过这个数字5秒。缺省值是512。

  gc_thresh3

  保存在ARP高速缓存中的最多记录的硬限制,一旦高速缓存中的数目高于此,垃圾收集器将马上运行。缺省值是1024。

  locktime

  ARP记录保存在高速缓存内的最短时间(jiffy数),以防止存在多个可能的映射(potential mapping)时,ARP高速缓存系统的颠簸(经常是由于网络的错误配置而引起)。缺省值是1秒。

  mcast_solicit

  在把记录标记为不可抵达的之前,用多路广播/广播(multicast/broadcast)方式解析地址的最大次数。

  缺省值是3。

  proxy_delay

  当接收到有一个请求已知的代理ARP地址的ARP请求时,在回应前可以延迟的jiffy(时间单位,见BUG)数目。这样,以防止网络风暴。缺省值是0.8秒。

  proxy_qlen

  能放入代理ARP地址队列(proxy-ARP addresses)的数据包最大数目。缺省值是64。

  retrans_time

  重发一个请求前的等待jiffy(时间单位,见BUG)的数目。缺省值是1秒。

  ucast_solicit

  询问ARP端口监控程序前,试图发送单探测(unicast probe)的次数。(见app_solicit).缺省值是3秒。

  unres_qlen

  每个没有被其它网络层解析的地址,在队列中可存放包的最大数目。缺省值是3.

cronolog apache日志大小限制2G的问题

在32位的系统上,单文件有大小的限制问题,在apache,cronolog的应用上,都有,如下,是apache通过cronolog后的错误提示

piped log program '/usr/local/sbin/cronolog /www/servers/apache/logs/access_log.%Y%m%d' failed unexpectedly
[Wed Aug 11 14:58:42 2010] [notice] child pid 911 exit signal File size limit exceeded (25)
piped log program '/usr/local/sbin/cronolog /www/servers/apache/logs/access_log.%Y%m%d' failed unexpectedly

 

1. 修改src/cronolog.c 2. 查找log_fd = open(pfilename, O_WRONLY|O_CREAT|O_APPEND, FILE_MODE);一共是两处 修改为如下log_fd = open64(pfilename, O_WRONLY|O_CREAT|O_APPEND, FILE_MODE); 如果编译不通过,可能是您的gcc版本问题,可以修改成如下 log_fd = open(pfilename, O_WRONLY|O_CREAT|O_APPEND|O_LARGEFILE, FILE_MODE); 3. 修改后重新编译,然后重启apache(测试过)

另一方法
CustomLog "|/usr/local/cronolog/sbin/cronolog /www/logs/bbs.wedchina.com-%Y%m%d-access_log" combined env=!image-request加上%Y%m%d参数

引用自
CHOST=i686-pc-linux-gnu

CFLAGS=-march=i686 -O3 -pipe -fomit-frame-pointer -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE

CXX=gcc CXXFLAGS=-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE

./configure –prefix=/usr/local/cronolog-1.6.2

因为日志是通过cronolog来处理所以只要重新编译cronolog就可以了

关键是这一行代码…-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE

他会让你编译后的程序调用系统支持的64bit的操作..就不会有2G文件的限制了…

也重新编译了一下cronolog,希望不再有这个错误产生,观察中^

如果apache支持2G以上文件的下载呢,下面有一方法,现在还没测试

引用自
Linux下apache支持最大文件为2G,如果要让它支持更大文件,在编译前加上:

export CFLAGS=-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64

不加此参数的话,GCC默认是不支持大于2G的文件的。不光Apache2,其他的软件应该也适用。