vgscan

vgscan命令查找系统中存在的LVM卷组,并显示找到的卷组列表。vgscan命令仅显示找到的卷组的名称和LVM元数据类型,要得到卷组的详细信息需要使用vgdisplay命令。

语法

vgscan(选项)

选项

-d:调试模式;
--ignorerlockingfailure:忽略锁定失败的错误。

实例

使用vgscan命令扫描系统中所有的卷组。在命令行中输入下面的命令:

[root@localhost ~]# vgscan     #扫描并显示LVM卷组列表

输出信息如下:

Found volume group "vg2000" using metadata type lvm2  
Found volume group "vg1000" using metadata type lvm2 

说明:本例中,vgscan指令找到了两个LVM2卷组"vg1000"和"vg2000"。

partprobe

partprobe命令用于重读分区表,当出现删除文件后,出现仍然占用空间。可以partprobe在不重启的情况下重读分区。

语法

partprobe(选项)(参数)

选项

-d:不更新内核;
-s:显示摘要和分区;
-h:显示帮助信息;
-v:显示版本信息。

参数

设备:指定需要确认分区表改变的硬盘对应的设备文件。

实例

使用partprobe不重启系统添加新的磁盘分区,主机自带硬盘超过300GB,目前只划分使用了3个主分区,不到70GB,如下:

[root@localhost ~]# df -h 
Filesystem Size Used Avail Use% Mounted on 
/dev/sda1 29G 3.7G  24G 14% / 
/dev/sda2 29G  22G 5.2G 81% /oracle 
tmpfs    2.0G    0 2.0G  0% /dev/shm
[root@localhost ~]# cat /proc/partitions
major minor  #blocks  name

   8     0  311427072 sda
   8     1   30716248 sda1
   8     2   30716280 sda2
   8     3    8193150 sda3
   8    16     976896 sdb
   8    32     976896 sdc

…省略其他

现在需要给系统添加1个100GB的空间存放数据文件,而又不影响现有系统上业务的运行,使用fdisk结合partprobe命令不重启系统添加一块新的磁盘分区。操作步骤如下:

第1步 添加新的磁盘分区

[root@localhost ~]# fdisk /dev/sda
The number of cylinders for this disk is set to 38770.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of lilo)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

command (m for help): p

Disk /dev/sda: 318.9 GB, 318901321728 bytes
255 heads, 63 sectors/track, 38770 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   id  System
/dev/sda1   *           1        3824    30716248+  83  Linux
/dev/sda2            3825        7648    30716280   83  Linux
/dev/sda3            7649        8668     8193150   82  Linux swap / Solaris

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Selected partition 4
First cylinder (8669-38770, default 8669):
Using default value 8669
last cylinder or +size or +sizeM or +sizeK (8669-38770, default 38770): +100G   
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: 

Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.

第2步 使用工具partprobe让kernel读取分区信息:

[root@localhost ~]# partprobe

使用fdisk工具只是将分区信息写到磁盘,如果需要mkfs磁盘分区则需要重启系统,而使用partprobe则可以使kernel重新读取分区信息,从而避免重启系统。

第3步 格式化文件系统:

[root@localhost ~]# mkfs.ext3 /dev/sda4
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
12222464 inodes, 24416791 blocks
1220839 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
746 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 
    2654208, 4096000, 7962624, 11239424, 20480000, 23887872

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information:

done

This filesystem will be automatically checked every 26 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@localhost ~]#

第4步 mount新的分区/dev/sda4

[root@localhost ~]# e2label  /dev/sda4 /data
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/sda4 /data
[root@localhost ~]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1             29753556   3810844  24406900  14% /
/dev/sda2             29753588  11304616  16913160  41% /oracle
tmpfs                  2023936         0   2023936   0% /dev/shm
/dev/sda4             96132968    192312  91057300   1% /data

使用partprobe可以不用重启系统即可配合fdisk工具创建新的分区。

vgextend

vgextend命令用于动态扩展LVM卷组,它通过向卷组中添加物理卷来增加卷组的容量。LVM卷组中的物理卷可以在使用vgcreate命令创建卷组时添加,也可以使用vgextend命令动态的添加。

语法

vgextend(选项)(参数)

选项

-d:调试模式;
-t:仅测试。

参数

  • 卷组:指定要操作的卷组名称;
  • 物理卷列表:指定要添加到卷组中的物理卷列表。

实例

使用vgextend命令向卷组"vg2000"中添加物理卷。在命令行中输入下面的命令:

[root@localhost ~]# vgextend vg2000 /dev/sdb2     #将物理卷"/dev/sdb2"加入卷组"vg2000"

输出信息如下:

Volume group "vg2000" successfully extended

hdparm

hdparm命令提供了一个命令行的接口用于读取和设置IDE或SCSI硬盘参数。

语法

hdparm(选项)(参数)

选项

-a<快取分区>:设定读取文件时,预先存入块区的分区数,若不加上<快取分区>选项,则显示目前的设定;
-A<0或1>:启动或关闭读取文件时的快取功能;
-c<I/O模式>:设定IDE32位I/O模式;
-C:检测IDE硬盘的电源管理模式;
-d<0或1>:设定磁盘的DMA模式;
-f:将内存缓冲区的数据写入硬盘,并清楚缓冲区;
-g:显示硬盘的磁轨,磁头,磁区等参数;
-h:显示帮助;
-i:显示硬盘的硬件规格信息,这些信息是在开机时由硬盘本身所提供;
-I:直接读取硬盘所提供的硬件规格信息;
-k<0或1>:重设硬盘时,保留-dmu参数的设定;
-K<0或1>:重设硬盘时,保留-APSWXZ参数的设定;
-m<磁区数>:设定硬盘多重分区存取的分区数;
-n<0或1>:忽略硬盘写入时所发生的错误;
-p<PIO模式>:设定硬盘的PIO模式;
-P<磁区数>:设定硬盘内部快取的分区数;
-q:在执行后续的参数时,不在屏幕上显示任何信息;
-r<0或1>:设定硬盘的读写模式;
-S<时间>:设定硬盘进入省电模式前的等待时间;
-t;评估硬盘的读取效率;
-T:平谷硬盘快取的读取效率;
-u<0或1>:在硬盘存取时,允许其他中断要求同时执行;
-v:显示硬盘的相关设定;
-w<0或1>:设定硬盘的写入快取;
-X<传输模式>:设定硬盘的传输模式;
-y:使IDE硬盘进入省电模式;
-Y:使IDE硬盘进入睡眠模式;
-Z:关闭某些Seagate硬盘的自动省电功能。

参数

设备文件:指定id驱动对应的设备文件名。

实例

显示硬盘的相关设置:

hdparm /dev/sda
/dev/sda:
IO_support = 0 (default 16-bit)
readonly = 0 (off)
readahead = 256 (on)
geometry = 19457[柱面数]/255[磁头数]/63[扇区数], sectors = 312581808[总扇区数], start = 0[起始扇区数]

显示硬盘的柱面、磁头、扇区数:

hdparm -g /dev/sda
/dev/sda:
geometry = 19457[柱面数]/255[磁头数]/63[扇区数], sectors = 312581808[总扇区数], start = 0[起始扇区数]

测试硬盘的读取速度:

hdparm -T /dev/sda
/dev/sda:
 Timing cached reads:   4684 MB in  2.00 seconds = 2342.92 MB/sec

测试硬盘缓存的读取速度:

hdparm -T /dev/xvda
/dev/xvda:
Timing cached reads: 11154 MB in 1.98 seconds = 5633.44 MB/sec

检测硬盘的电源管理模式:

hdparm -C /dev/sda
/dev/sda:
drive state is: standby [省电模式]

查询并设置硬盘多重扇区存取的扇区数,以增进硬盘的存取效率:

hdparm -m /dev/sda
hdparm -m    #参数值为整数值如8 /dev/sda

附:硬盘坏道修复方法

检查:smartctl -l selftest /dev/sda
卸载:umount /dev/sda*
修复:badblocks /dev/sda

vgreduce

vgreduce命令通过删除LVM卷组中的物理卷来减少卷组容量。不能删除LVM卷组中剩余的最后一个物理卷。

语法

vgreduce(选项)(参数)

选项

-a:如果命令行中没有指定要删除的物理卷,则删除所有的空物理卷;
--removemissing:删除卷组中丢失的物理卷,使卷组恢复正常状态。

参数

  • 卷组:指定要操作的卷组名称;
  • 物理卷列表:指定要删除的物理卷列表。

实例

使用vgreduce命令从卷组"vg2000"中移除物理卷/dev/sdb2。在命令行中输入下面的命令:

[root@localhost ~]# vgreduce vg2000 /dev/sdb2    #将物理卷"/dev/sdb2"从卷组"vg2000"中删除

输出信息如下:

Removed "/dev/sdb2" from volume group "vg2000"

mkinitrd

mkinitrd命令建立要载入ramdisk的映像文件,以供Linux开机时载入ramdisk。

这个是重新封包核心的命令,例如你自己修改了一个设备的驱动,如果这个驱动要加入核心级别的话,就需要对核心进行重新封包,把新加的配置编译到核心内部去!

语法

mkinitrd(选项)(参数)

选项

-f:若指定的映像问家名称与现有文件重复,则覆盖现有的文件;
-v:执行时显示详细的信息;
--omit-scsi-modules:不要载入SCSI模块;
--preload=<模块名称>:指定要载入的模块;
--with=<模块名称>:指定要载入的模块;
--version:显示版本信息。

参数

  • 映像文件:指定要创建的映像文件;
  • 内核版本:指定内核版本。

实例

[root@localhost tmp]# mkinitrd -v -f myinitrd.img $(uname -r)
Creating initramfs
WARNING: using /tmp for temporary files
Looking for deps of module ide-disk
Looking for deps of module ext3  jbd
Looking for deps of module jbd
Using modules:  ./kernel/fs/jbd/jbd.ko ./kernel/fs/ext3/ext3.ko
/sbin/nash -> /tmp/initrd.Vz3928/bin/nash
/sbin/insmod.static -> /tmp/initrd.Vz3928/bin/insmod
/sbin/udev.static -> /tmp/initrd.Vz3928/sbin/udev
/etc/udev/udev.conf -> /tmp/initrd.Vz3928/etc/udev/udev.conf
copy from /lib/modules/2.6.9-5.EL/./kernel/fs/jbd/jbd.ko(elf32-i386) to /tmp/initrd.Vz3928/lib/jbd.ko(elf32-i386)
copy from /lib/modules/2.6.9-5.EL/./kernel/fs/ext3/ext3.ko(elf32-i386) to /tmp/initrd.Vz3928/lib/ext3.ko(elf32-i386)
Loading module jbd
Loading module ext3

[root@localhost tmp]# file myinitrd.img
myinitrd.img: gzip compressed data, from Unix, max compression

[root@localhost tmp]# mv myinitrd.img  myinitrd.img.gz
[root@localhost tmp]# gzip -d myinitrd.img.gz
[root@localhost tmp]# file myinitrd.img
myinitrd.img: ASCII cpio archive (SVR4 with no CRC)

mkisofs

mkisofs命令用来将指定的目录与文件做成ISO 9660格式的映像文件,以供刻录光盘。

语法

mkisofs(选项)(参数)

选项

-a或--all:mkisofs通常不处理备份文件。使用此参数可以把备份文件加到映像文件中;
-A<应用程序id>或-appid<应用程序ID>:指定光盘的应用程序ID;
-abstract<摘要文件>:指定摘要文件的文件名;
-b<开机映像文件>或-eltorito-boot<开机映像文件>:指定在制作可开机光盘时所需的开机映像文件;
-biblio<ISBN文件>:指定ISBN文件的文件名,ISBN文件位于光盘根目录下,记录光盘的ISBN;
-c<开机文件名称>:制作可开机光盘时,mkisofs会将开机映像文件中的全-eltorito-catalog<开机文件名称>全部内容作成一个文件;
-C<盘区编号,盘区编号>:将许多节区合成一个映像文件时,必须使用此参数;
-copyright<版权信息文件>:指定版权信息文件的文件名;
-d或-omit-period:省略文件后的句号;
-D或-disable-deep-relocation:ISO 9660最多只能处理8层的目录,超过8层的部分,RRIP会自动将它们设置成ISO 9660兼容的格式。使用-D参数可关闭此功能;
-f或-follow-links:忽略符号连接;
-h:显示帮助;
-hide<目录或文件名>:使指定的目录或文件在ISO 9660或Rock RidgeExtensions的系统中隐藏;
-hide-joliet<目录或文件名>:使指定的目录或文件在Joliet系统中隐藏;
-J或-joliet:使用Joliet格式的目录与文件名称;
-l或-full-iso9660-filenames:使用ISO 9660 32字符长度的文件名;
-L或-allow-leading-dots:允许文件名的第一个字符为句号;
-log-file<记录文件>:在执行过程中若有错误信息,预设会显示在屏幕上;
-m<目录或文件名>或-exclude<目录或文件名>:指定的目录或文件名将不会房入映像文件中;
-M<映像文件>或-prev-session<映像文件>:与指定的映像文件合并;
-N或-omit-version-number:省略ISO 9660文件中的版本信息;
-o<映像文件>或-output<映像文件>:指定映像文件的名称;
-p<数据处理人>或-preparer<数据处理人>:记录光盘的数据处理人;
-print-size:显示预估的文件系统大小;
-quiet:执行时不显示任何信息;
-r或-rational-rock:使用Rock Ridge Extensions,并开放全部文件的读取权限;
-R或-rock:使用Rock Ridge Extensions;
-sysid<系统ID>:指定光盘的系统ID;
-T或-translation-table:建立文件名的转换表,适用于不支持Rock Ridge Extensions的系统上;
-v或-verbose:执行时显示详细的信息;
-V<光盘ID>或-volid<光盘ID>:指定光盘的卷册集ID;
-volset-size<光盘总数>:指定卷册集所包含的光盘张数;
-volset-seqno<卷册序号>:指定光盘片在卷册集中的编号;
-x<目录>:指定的目录将不会放入映像文件中;
-z:建立通透性压缩文件的SUSP记录,此记录目前只在Alpha机器上的Linux有效。

参数

路径:需要添加到映像文件中的路径。

实例

linux中用mkisofs命令把文件制作成ISO步骤:

把NFS服务器上的目录挂载到本地/mnt/nfs/的目录:

mount -t nfs 10.0.2.2:/linuxos/rhel4.0_update3/ /mnt/nfs/

把已挂载的文件复制到本地:

cp -a /mnt/NFS/* /root/Decp -a /mnt/nfs/* /root/Desktop/rhel4.0/&sktop/rhel4.0/&

查找boot.cat文件并删除掉:

find rhel4.0/ -name boot.cat | xargs rm

查找TRANS.TBL文件并删除掉:

find rhel4.0/ -name TRANS.TBL -exec rm {} \;

复制本地的所需文件到指定目录:

cp /usr/share/comps/i386/.discinfo rhel4.0/

把指定目录下的所有文件制作成ISO文件:

mkisofs -R -J -T -v -no-emul-boot -boot-load-size 4 -boot-info-table -V RHEL4ASDVD -b isolinux/isolinux.bin -c isolinux/boot.cat -o /RHEL4AS.iso rhel4.0/

mknod

mknod命令用于创建Linux中的字符设备文件和块设备文件。

语法

mknod(选项)(参数)

选项

-Z:设置安全的上下文;
-m:设置权限模式;
-help:显示帮助信息;
--version:显示版本信息。

参数

  • 文件名:要创建的设备文件名;
  • 类型:指定要创建的设备文件的类型;
  • 主设备号:指定设备文件的主设备号;
  • 次设备号:指定设备文件的次设备号。

实例

ls -la /dev/ttyUSB*
crw-rw—- 1 root dialout 188, 0 2008-02-13 18:32 /dev/ttyUSB0
mknod /dev/ttyUSB32 c 188 32

扩展知识

Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录 下,称为设备文件。应用程序可以打开、关闭和读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。

为了管理这些设备,系统为设备编了号,每 个设备号又分为主设备号和次设备号。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编 号,如硬盘的主设备号是3。

Linux为所有的设备文件都提供了统一的操作函数接口,方法是使用数据结构struct file_operations。这个数据结构中包括许多操作函数的指针,如open()、close()、read()和write()等,但由于外设 的种类较多,操作方式各不相同。Struct file_operations结构体中的成员为一系列的接口函数,如用于读/写的read/write函数和用于控制的ioctl等。

打开一个文件就是调用这个文件file_operations中的open操作。不同类型的文件有不同的file_operations成员函数,如普通的磁盘数据文件, 接口函数完成磁盘数据块读写操作;而对于各种设备文件,则最终调用各自驱动程序中的I/O函数进行具体设备的操作。这样,应用程序根本不必考虑操作的是设 备还是普通文件,可一律当作文件处理,具有非常清晰统一的I/O接口。所以file_operations是文件层次的I/O接口。

vgchange

vgchange命令用于修改卷组的属性,经常被用来设置卷组是处于活动状态或非活动状态。处于活动状态的卷组无法被删除,必须使用vgchange命令将卷组设置为非活动状态后才能删除。

语法

vgchange(选项)(参数)

选项

-a:设置卷组的活动状态。

参数

卷组:指定要设置属性的卷组。

实例

使用vgchange命令将卷组状态改为活动的。在命令行中输入下面的命令:

[root@localhost ~]# vgchange -ay vg1000     #将卷组"vg1000"设置为活动状态

输出信息如下:

1 logical volume(s) in volume group "vg1000" now active

mkswap

mkswap命令用于在一个文件或者设备上建立交换分区。在建立完之后要使用sawpon命令开始使用这个交换区。最后一个选择性参数指定了交换区的大小,但是这个参数是为了向后兼容设置的,没有使用的必要,一般都将整个文件或者设备作为交换区。

语法

mkswap(选项)(参数)

选项

-c:建立交换区前,先检查是否有损坏的区块;
-f:在SPARC电脑上建立交换区时,要加上此参数;
-v0:建立旧式交换区,此为预设值;
-v1:建立新式交换区。

参数

设备:指定交换空间对应的设备文件或者交换文件。

实例

查看系统swap space大小:

free -m
total used free shared buffers cached
Mem: 377 180 197 0 19 110
-/+ buffers/cache: 50 327
Swap: 572 0 572

查看当前的swap空间(file(s)/partition(s)):

swapon -s

等价于

cat /proc/swaps

添加交换空间

添加一个交换分区或添加一个交换文件。推荐你添加一个交换分区;不过,若你没有多少空闲空间可用,则添加交换文件。

添加一个交换分区,步骤如下:

使用fdisk来创建交换分区(假设 /dev/sdb2 是创建的交换分区),使用 mkswap 命令来设置交换分区:

mkswap /dev/sdb2

启用交换分区:

swapon /dev/sdb2

写入/etc/fstab,以便在引导时启用:

/dev/sdb2 swap swap defaults 0 0

添加一个交换文件,步骤如下:

创建大小为512M的交换文件:

dd if=/dev/zero of=/swapfile1 bs=1024 count=524288

使用mkswap命令来设置交换文件:

mkswap /swapfile1

启用交换分区:

swapon /swapfile1

写入/etc/fstab,以便在引导时启用:

/swapfile1 swap swap defaults 0 0

新添了交换分区并启用它之后,请查看cat /proc/swaps或free命令的输出来确保交换分区已被启用了。

删除交换空间:

禁用交换分区:

swapoff /dev/sdb2

/etc/fstab中删除项目,使用fdisk或yast工具删除分区。