光纤链路聚合使用哪种聚合方式比较好?

原题如下:

在SW3-1、 SW3-2之间的链路假设采用光纤链路互连,两端采用光纤收发器转换成RJ45接口,要求在两者间启用端口汇聚技术,聚合的方式根据题目推断选择合适的方式;

这个问题是我在一份外校老师发我的赛题上看到的,当时懵了一会,询问后得知:应使用静态方式聚合

至于原因嘛,目前还不晓得~

OSPF网络中必须有area 0吗?

这要看OSPF网络是单区域还是多区域的啦!

如果是多区域的OSPF则必须要有area 0,因为不同区域间需要通过area 0来交换路由信息。

而如果是单区域OSPF网络则area 0就不是必须的啦,因为不涉及到区域间的路由交换,也就不需要area 0这个“中转站”了。

所以,你可以将单区域OSPF配置成area 10、area 11、area 12等等的,都可以!

OSPF路由协议中重发布直连网段与使用network宣告直连网段的区别

很多朋友为了省事,喜欢使用redistribute connected命令直接将直连路由引入到ospf中,虽然这样很方便,但其产生的弊端也显而易见。

通过network宣告的网段是属于1、2、3类LSA,但通过redistribute connected引入的路由则属于外部路由,其是4、5类LSA。这样引入的路由在传输时是距离矢量路由,而通过network宣告进OSPF的路由则是链路状态路由。这在多点双向重发布时就会产生环路和次优路径,需要配合策略路由来消除,得不偿失。

samba配置文件smb.conf详解

前言

Samba的主配置文件叫smb.conf,默认在/etc/samba/目录下。
smb.conf含有多个段,每个段由段名开始,直到下个段名。每个段名放在方括号中间。每段的参数的格式是:名称=指。配置文件中一行一个段名和参数,段名和参数名不分大小写。
除了[global]段外,所有的段都可以看作是一个共享资源。段名是该共享资源的名字,段里的参数是该共享资源的属性。
Samba安装好后,使用testparm命令可以测试smb.conf配置是否正确。使用testparm –v命令可以详细的列出smb.conf支持的配置参数。

全局参数

==================Global Settings ===================
[global]

config file = /usr/local/samba/lib/smb.conf.%m
说明:config file可以让你使用另一个配置文件来覆盖缺省的配置文件。如果文件 不存在,则该项无效。这个参数很有用,可以使得samba配置更灵活,可以让一台samba服务器模拟多台不同配置的服务器。比如,你想让PC1(主机名)这台电脑在访问Samba Server时使用它自己的配置文件,那么先在/etc/samba/host/下为PC1配置一个名为smb.conf.pc1的文件,然后在smb.conf中加入:config file = /etc/samba/host/smb.conf.%m。这样当PC1请求连接Samba Server时,smb.conf.%m就被替换成smb.conf.pc1。这样,对于PC1来说,它所使用的Samba服务就是由smb.conf.pc1定义的,而其他机器访问Samba Server则还是应用smb.conf。

workgroup = WORKGROUP
说明:设定 Samba Server 所要加入的工作组或者域。

server string = Samba Server Version %v
说明:设定 Samba Server 的注释,可以是任何字符串,也可以不填。宏%v表示显示Samba的版本号。

netbios name = smbserver
说明:设置Samba Server的NetBIOS名称。如果不填,则默认会使用该服务器的DNS名称的第一部分。netbios name和workgroup名字不要设置成一样了。

interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
说明:设置Samba Server监听哪些网卡,可以写网卡名,也可以写该网卡的IP地址。

hosts allow = 127. 192.168.1. 192.168.10.1
说明:表示允许连接到Samba Server的客户端,多个参数以空格隔开。可以用一个IP表示,也可以用一个网段表示。hosts deny 与hosts allow 刚好相反。
例如:hosts allow=172.17.2.EXCEPT172.17.2.50
表示容许来自172.17.2..的主机连接,但排除172.17.2.50
hosts allow=172.17.2.0/255.255.0.0
表示容许来自172.17.2.0/255.255.0.0子网中的所有主机连接
hosts allow=M1,M2
表示容许来自M1和M2两台计算机连接
hosts allow=@xq
表示容许来自XQ网域的所有计算机连接

max connections = 0
说明:max connections用来指定连接Samba Server的最大连接数目。如果超出连接数目,则新的连接请求将被拒绝。0表示不限制。

deadtime = 0
说明:deadtime用来设置断掉一个没有打开任何文件的连接的时间。单位是分钟,0代表Samba Server不自动切断任何连接。

time server = yes/no
说明:time server用来设置让nmdb成为windows客户端的时间服务器。

log file = /var/log/samba/log.%m
说明:设置Samba Server日志文件的存储位置以及日志文件名称。在文件名后加个宏%m(主机名),表示对每台访问Samba Server的机器都单独记录一个日志文件。如果pc1、pc2访问过Samba Server,就会在/var/log/samba目录下留下log.pc1和log.pc2两个日志文件。

max log size = 50
说明:设置Samba Server日志文件的最大容量,单位为kB,0代表不限制。

security = user
说明:设置用户访问Samba Server的验证方式,一共有四种验证方式。

  1. share:用户访问Samba Server不需要提供用户名和口令, 安全性能较低。
  2. user:Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。账号和密码要在本Samba Server中建立。
  3. server:依靠其他Windows NT/2000或Samba Server来验证用户的账号和密码,是一种代理验证。此种安全模式下,系统管理员可以把所有的Windows用户和口令集中到一个NT系统上,使用Windows NT进行Samba认证, 远程服务器可以自动认证全部用户和口令,如果认证失败,Samba将使用用户级安全模式作为替代的方式。
  4. domain:域安全级别,使用主域控制器(PDC)来完成认证。

passdb backend = tdbsam
说明:passdb backend就是用户后台的意思。目前有三种后台:smbpasswd、tdbsam和ldapsam。sam应该是security account manager(安全账户管理)的简写。
1.smbpasswd:该方式是使用smb自己的工具smbpasswd来给系统用户(真实
用户或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba的资源。smbpasswd文件默认在/etc/samba目录下,不过有时候要手工建立该文件。
2.tdbsam:该方式则是使用一个数据库文件来建立用户数据库。数据库文件叫passdb.tdb,默认在/etc/samba目录下。passdb.tdb用户数据库可以使用smbpasswd –a来建立Samba用户,不过要建立的Samba用户必须先是系统用户。我们也可以使用pdbedit命令来建立Samba账户。pdbedit命令的参数很多,我列出几个主要的。

pdbedit –a username:新建Samba账户。
pdbedit –x username:删除Samba账户。
pdbedit –L:列出Samba用户列表,读取passdb.tdb数据库文件。
pdbedit –Lv:列出Samba用户列表的详细信息。
pdbedit –c “[D]” –u username:暂停该Samba用户的账号。
pdbedit –c “[]” –u username:恢复该Samba用户的账号。

3.ldapsam:该方式则是基于LDAP的账户管理方式来验证用户。首先要建立LDAP服务,然后设置“passdb backend = ldapsam:ldap://LDAP Server”

encrypt passwords = yes/no
说明:是否将认证密码加密。因为现在windows操作系统都是使用加密密码,所以一般要开启此项。不过配置文件默认已开启。

smb passwd file = /etc/samba/smbpasswd
说明:用来定义samba用户的密码文件。smbpasswd文件如果没有那就要手工新建。

username map = /etc/samba/smbusers
说明:用来定义用户名映射,比如可以将root换成administrator、admin等。不过要事先在smbusers文件中定义好。比如:root = administrator admin,这样就可以用administrator或admin这两个用户来代替root登陆Samba Server,更贴近windows用户的习惯。

guest account = nobody
说明:用来设置guest用户名。

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
说明:用来设置服务器和客户端之间会话的Socket选项,可以优化传输速度。

domain master = yes/no
说明:设置Samba服务器是否要成为网域主浏览器,网域主浏览器可以管理跨子网域的浏览服务。

local master = yes/no
说明:local master用来指定Samba Server是否试图成为本地网域主浏览器。如果设为no,则永远不会成为本地网域主浏览器。但是即使设置为yes,也不等于该Samba Server就能成为主浏览器,还需要参加选举。

preferred master = yes/no
说明:设置Samba Server一开机就强迫进行主浏览器选举,可以提高Samba Server成为本地网域主浏览器的机会。如果该参数指定为yes时,最好把domain master也指定为yes。使用该参数时要注意:如果在本Samba Server所在的子网有其他的机器(不论是windows NT还是其他Samba Server)也指定为首要主浏览器时,那么这些机器将会因为争夺主浏览器而在网络上大发广播,影响网络性能。
如果同一个区域内有多台Samba Server,将上面三个参数设定在一台即可。

os level = 200
说明:设置samba服务器的os level。该参数决定Samba Server是否有机会成为本地网域的主浏览器。os level从0到255,winNT的os level是32,win95/98的os level是1。Windows 2000的os level是64。如果设置为0,则意味着Samba Server将失去浏览选择。如果想让Samba Server成为PDC,那么将它的os level值设大些。

domain logons = yes/no
说明:设置Samba Server是否要做为本地域控制器。主域控制器和备份域控制器都需要开启此项。

logon . = %u.bat
说明:当使用者用windows客户端登陆,那么Samba将提供一个登陆档。如果设置成%u.bat,那么就要为每个用户提供一个登陆档。如果人比较多,那就比较麻烦。可以设置成一个具体的文件名,比如start.bat,那么用户登陆后都会去执行start.bat,而不用为每个用户设定一个登陆档了。这个文件要放置在[netlogon]的path设置的目录路径下。

wins support = yes/no
说明:设置samba服务器是否提供wins服务。

wins server = wins服务器IP地址
说明:设置Samba Server是否使用别的wins服务器提供wins服务。

wins proxy = yes/no
说明:设置Samba Server是否开启wins代理服务。

dns proxy = yes/no
说明:设置Samba Server是否开启dns代理服务。

load printers = yes/no
说明:设置是否在启动Samba时就共享打印机。

printcap name = cups
说明:设置共享打印机的配置文件。

printing = cups
说明:设置Samba共享打印机的类型。现在支持的打印系统有:bsd, sysv, plp, lprng, aix, hpux, qnx

共享参数

================== Share Definitions ==================
[共享名]

comment = 任意字符串
说明:comment是对该共享的描述,可以是任意字符串。

path = 共享目录路径
说明:path用来指定共享目录的路径。可以用%u、%m这样的宏来代替路径里的unix用户和客户机的Netbios名,用宏表示主要用于[homes]共享域。例如:如果我们不打算用home段做为客户的共享,而是在/home/share/下为每个Linux用户以他的用户名建个目录,作为他的共享目录,这样path就可以写成:path = /home/share/%u; 。用户在连接到这共享时具体的路径会被他的用户名代替,要注意这个用户名路径一定要存在,否则,客户机在访问时会找不到网络路径。同样,如果我们不是以用户来划分目录,而是以客户机来划分目录,为网络上每台可以访问samba的机器都各自建个以它的netbios名的路径,作为不同机器的共享资源,就可以这样写:path = /home/share/%m 。

browseable = yes/no
说明:browseable用来指定该共享是否可以浏览。

writable = yes/no
说明:writable用来指定该共享路径是否可写。

available = yes/no
说明:available用来指定该共享资源是否可用。

admin users = 该共享的管理者
说明:admin users用来指定该共享的管理员(对该共享具有完全控制权限)。在samba 3.0中,如果用户验证方式设置成“security=share”时,此项无效。
例如:admin users =bobyuan,jane(多个用户中间用逗号隔开)。

valid users = 允许访问该共享的用户
说明:valid users用来指定允许访问该共享资源的用户。
例如:valid users = bobyuan,@bob,@tech(多个用户或者组中间用逗号隔开,如果要加入一个组就用“@+组名”表示。)

invalid users = 禁止访问该共享的用户
说明:invalid users用来指定不允许访问该共享资源的用户。
例如:invalid users = root,@bob(多个用户或者组中间用逗号隔开。)

write list = 允许写入该共享的用户
说明:write list用来指定可以在该共享下写入文件的用户。
例如:write list = bobyuan,@bob

public = yes/no
说明:public用来指定该共享是否允许guest账户访问。

guest ok = yes/no
说明:意义同“public”。

几个特殊共享:
[homes]
comment = Home Directories
browseable = no
writable = yes
valid users = %S
; valid users = MYDOMAIN%S

[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes

[netlogon]
comment = Network Logon Service
path = /var/lib/samba/netlogon
guest ok = yes
writable = no
share modes = no

[Profiles]
path = /var/lib/samba/profiles
browseable = no
guest ok = yes

本文转载自:http://yuanbin.blog.51cto.com/363003/115761,在此向原作者致敬。

PPP认证时产生地址为对端的32位直连路由的解决方法

问题描述

在串口启用PPP认证后,会在路由表中多出一条地址为对端的32位直连路由,这在双点双向重发布中将产生路由环路,十分烦人!

类似下面这样:

C 202.90.1.0/30 is directly connected, Serial0/1
C 202.90.1.2/32 is directly connected, Serial0/1    //此条为PPP认证产生的路由,202.90.1.2为对端串口的地址

解决方法

在两边的串口上敲以下命令就好啦!

Router_config_s0/1#no peer neighbor-route    //禁止创建到对端的主机路由

Apache配置对站点目录的认证

前言:

有的时候需要对站点中的某个目录进行保护,只有输入指定的账号密码才可以浏览。这当然可以通过动态网站设计语言来实现,但通过对Apache本身的配置来实现似乎要更方便一些。

配置方法:

一、Apache配置编辑及站点创建

创建一个站点配置文件。

[root@localhost auth]# vim /etc/httpd/conf.d/vhost1.conf

内容如下:

<Directory "/tmp/html/auth/">      // 要启用认证的目录
    AuthName "请认证身份"           // 服务器返回的认证对话框的标题
    AuthType Basic                 // 认证类型
    AuthUserFile /tmp/html/auth/.htpasswd      // 密码配置文件路径
    require valid-user             // 允许通过认证的所有用户访问,如果改为某一用户名则只允许此用户访问
</Directory>
<VirtualHost *:80>                 // 创建一个简单的虚拟主机用于测试
    DocumentRoot /tmp/html/
</VirtualHost>

创建站点运行目录及要开启认证的站点子目录。

[root@hostname ~]# mkdir -p /tmp/html{,/auth}

查看此时的站点目录结构。

[root@hostname ~]# tree /tmp/html/
/tmp/html/
└── auth

在站点子目录下创建首页文件。

[root@hostname ~]# echo 'Hello,world!' > /tmp/html/auth/index.html

二、生成用户密码配置文件

创建新文件,并向其中添加一个用户认证信息。

[root@hostname ~]# htpasswd -cb /tmp/html/auth/.htpasswd user1 123456     //-c参数用于创建新文件,若文件已存在则无需使用-c参数,-b参数用于指定在命令行中直接键入密码,而不是用交互模式。user1为用户名,123456为密码。
Adding password for user user1   //提示成功添加了user1的用户密码

增加一个新的认证用户。

[root@hostname ~]# htpasswd -b /tmp/html/auth/.htpasswd user2 123456
Adding password for user user2   //成功添加

修改用户的密码。

[root@hostname ~]# htpasswd -mb /tmp/html/auth/.htpasswd user1 654321
Updating password for user user1 //密码更新成功

删除认证用户。

[root@hostname ~]# htpasswd -D /tmp/html/auth/.htpasswd user2
Deleting password for user user1 //删除成功

测试:

使用浏览器访问http://URL/auth(URL是你网站的域名或IP)就会看到要求认证的对话框啦!

这里我为了方便,使用的是Linux下的Links浏览器进行测试的。

正确输入账号密码后,即可看到网页内容。

CentOS 6中创建及管理LVM逻辑卷

LVM简介:

LVM是逻辑管理卷的简写,其可以将多块物理磁盘的分区组成一个大的卷组(可以把他想象成是一个大的资源池),再在卷组上划分出逻辑卷并在其上建立文件系统最终供用户使用。

LVM的好处是可以动态的增加逻辑卷的大小,这样就不用面临随着业务发展,原本的分区空间不足的尴尬啦!

下面是LVM的结构图,最下面是物理磁盘分区,其上是物理卷(一个物理磁盘分区对应一个物理卷),再往上是我称之为“资源池”的卷组,这个“资源池”的容量是由组成其的物理卷的总容量决定的,而最上面则是可以被当成“普通分区”来使用的逻辑卷,逻辑卷可以划分很多个(默认一个卷组可以划分256个逻辑卷),只要其加起来的容量不超过“资源池”的容量就好!

创建LVM:

一、安装LVM软件包

通常情况下,CentOS中都有自带LVM软件包,但为了以防万一,我还是把安装命令贴出来吧~

[root@localhost ~]# yum install -y lvm

二、创建物理磁盘的分区

记得要先添加一块空磁盘呐,本实验中我添加了一块8GB大小的SCSI磁盘。

查看新添加的磁盘。

[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 4.2G 0 rom /media/cdrom
sda 8:0 0 8G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 7.5G 0 part
 ├─VolGroup-lv_root (dm-0) 253:0 0 6.7G 0 lvm /
 └─VolGroup-lv_swap (dm-1) 253:1 0 816M 0 lvm [SWAP]
sdb 8:16 0 8G 0 disk

如果新加的磁盘不能被系统立即识别请参考此篇文章。

https://www.ibadboy.net/archives/1895.html

使用fdisk工具对新加磁盘进行分区。

[root@localhost ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x028d3c84.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
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): n          //新建磁盘分区
Command action
   e   extended
   p   primary partition (1-4)
p            //新建为主分区
Partition number (1-4): 1             //设置分区编号
First cylinder (1-1044, default 1):   s           //设置起始扇区
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044):522           //设置结束扇区,这里我结束扇区设置为总扇区数的一半,相当于把分区容量设置为总容量的一半
Command (m for help): n          //新建第二块磁盘分区
Command action
   e   extended
   p   primary partition (1-4)
p           //新建为主分区
Partition number (1-4): 2            //设置分区编号
First cylinder (523-1044, default 523):          //设置起始扇区
Using default value 523
Last cylinder, +cylinders or +size{K,M,G} (523-1044, default 1044):             //设置结束扇区
Using default value 1044
Command (m for help): t             //更改分区的标识
Partition number (1-4): 1           //选择编号为1的分区进行操作
Hex code (type L to list codes): 8e //将分区标识更改为“Linux LVM”,其对应的代码是8e,这里可以输入list来查看所有标识对应的代码
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): t             //更改分区的标识
Partition number (1-4): 2           //选择编号为2的分区进行操作
Hex code (type L to list codes): 8e //将分区标识更改为“Linux LVM”
Changed system type of partition 2 to 8e (Linux LVM)
Command (m for help): p             //查看刚刚新建的分区
Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 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: 0x028d3c84
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         522     4192933+  8e  Linux LVM
/dev/sdb2             523        1044     4192965   8e  Linux LVM
Command (m for help): w             //保存并退出fdisk工具
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

三、创建物理卷

使用新创建的/dev/sdb1和/dev/sdb2这两个分区分别组建物理卷。

[root@localhost ~]# pvcreate /dev/sdb[12]
  Physical volume "/dev/sdb1" successfully created          //提示说物理卷创建成功
  Physical volume "/dev/sdb2" successfully created

查看物理卷。

[root@localhost ~]# pvdisplay
  "/dev/sdb1" is a new physical volume of "4.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1            //物理卷名称
  VG Name                                    //所属的卷组名称,这里还未加入任何卷组
  PV Size               4.00 GiB             //物理卷大小
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               pTps5V-4vKA-em0G-XR8Y-ltJu-4CeL-KEOMn3
  "/dev/sdb2" is a new physical volume of "4.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb2            //物理卷名称
  VG Name                                    //所属的卷组名称
  PV Size               4.00 GiB             //物理卷大小
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               uzW0YS-fl5a-4Qae-6vcG-iXce-a8iB-QYMvf4

四、创建卷组

将刚刚新建的物理卷/dev/sdb1和/dev/sdb2组成一个卷组——vg1

[root@localhost ~]# vgcreate vg1 /dev/sdb[12]
 Volume group "vg1" successfully created          //提示说卷组创建成功卷

查看卷组

[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               vg1             //卷组名称
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write      //卷组的访问权限
  VG Status             resizable       //卷组状态
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               7.99 GiB        //卷组容量
  PE Size               4.00 MiB
  Total PE              2046
  Alloc PE / Size       0 / 0
  Free  PE / Size       2046 / 7.99 GiB
  VG UUID               dY8zDo-vD43-DQB8-CpRs-Shla-kWfJ-OuDjhp

五、划分逻辑卷

从总容量为8G(其实不足8G)的卷组vg1中划分四个逻辑卷,分别为lv1、lv2、lv3、lv4,每个大小为2000MB。

[root@localhost ~]# lvcreate -L 2000MB -n lv1 vg1       //-L参数后面接逻辑卷大小,单位可以是KB、MB、GB。
 Logical volume "lv1" created
[root@localhost ~]# lvcreate -L 2000MB -n lv2 vg1
 Logical volume "lv2" created
[root@localhost ~]# lvcreate -L 2000MB -n lv3 vg1
 Logical volume "lv3" created
[root@localhost ~]# lvcreate -L 2000MB -n lv4 vg1
 Logical volume "lv4" created

查看逻辑卷,因为这里的输出信息比较多,我只截取lv1这个逻辑卷的信息做简要说明。

[root@localhost ~]# lvdisplay
 --- Logical volume ---
 LV Path /dev/vg1/lv1          //逻辑卷路径
 LV Name lv1                   //逻辑卷名称
 VG Name vg1                   //逻辑卷所属的卷组的名称
 LV UUID qhypYJ-jPOW-KDDy-NXtO-aWQO-ryHI-Tf04hS
 LV Write Access read/write
 LV Creation host, time localhost.localdomain, 2017-10-11 13:13:54 +0800
 LV Status available
 # open 0
 LV Size 1.95 GiB              //逻辑卷容量
 Current LE 500
 Segments 1
 Allocation inherit
 Read ahead sectors auto
 - currently set to 256
 Block device 253:2

至此,逻辑卷已创建完成,但此时还不能立即使用,还需要在逻辑卷上新建文件系统。

这里为了不让文章显得啰嗦,我只在逻辑卷lv1上创建文件系统。

[root@localhost ~]# mkfs.ext4 /dev/vg1/lv1
mke2fs 1.41.12 (17-May-2010)
文件系统标签=
操作系统:Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
128000 inodes, 512000 blocks
25600 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=524288000
16 block groups
32768 blocks per group, 32768 fragments per group
8000 inodes per group
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912
正在写入inode表: 完成
Creating journal (8192 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

挂载逻辑卷。

[root@localhost ~]# mount /dev/vg1/lv1 /mnt
[root@localhost ~]# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root  6.7G  816M  5.5G  13% /
tmpfs                         246M     0  246M   0% /dev/shm
/dev/sda1                     485M   33M  427M   8% /boot
/dev/sr0                      4.2G  4.2G     0 100% /media/cdrom
/dev/mapper/vg1-lv1           2.0G   35M  1.8G   2% /mnt

管理LVM:

卷组的扩容

这里我新增加一块8G的空SCSI磁盘,并在其基础上创建一个8G的物理卷。

将刚刚新建的8G大小的物理卷加入到vg1卷组中,实现对vg1卷组的扩容。

[root@localhost ~]# vgextend vg1 /dev/sdc1
  dev_is_mpath: failed to get device for 8:33
  No physical volume label read from /dev/sdc1
  Physical volume /dev/sdc1 not found
  Physical volume "/dev/sdc1" successfully created
  Volume group "vg1" successfully extended

查看卷组信息,注意看卷组容量。

[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               vg1
  System ID
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  14
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                4
  Open LV               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               15.99 GiB          //卷组的总容量已增加
  PE Size               4.00 MiB
  Total PE              4093
  Alloc PE / Size       2000 / 7.81 GiB
  Free  PE / Size       2093 / 8.18 GiB
  VG UUID               dY8zDo-vD43-DQB8-CpRs-Shla-kWfJ-OuDjhp

逻辑卷的扩容

这里对已经挂载在/mnt目录上的lv1逻辑卷进行扩容,将其大小变为10GB。

[root@localhost ~]# lvextend -L 10GB -n /dev/vg1/lv1
 Extending logical volume lv1 to 10.00 GiB
 Logical volume lv1 successfully resized

重设逻辑卷大小,只有正在使用的逻辑卷才需要重设大小。

[root@localhost ~]# resize2fs /dev/vg1/lv1
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/vg1/lv1 is mounted on /mnt; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/vg1/lv1 to 2621440 (4k) blocks.
The filesystem on /dev/vg1/lv1 is now 2621440 blocks long.

查看此时lv1的容量,已实现动态扩容。

[root@localhost ~]# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root  6.7G  816M  5.5G  13% /
tmpfs                         246M     0  246M   0% /dev/shm
/dev/sda1                     485M   33M  427M   8% /boot
/dev/sr0                      4.2G  4.2G     0 100% /media/cdrom
/dev/mapper/vg1-lv1           9.9G   37M  9.4G   1% /mnt

Linux下查看串口信息

使用管道命令过滤系统开机时的启动信息来得出当前系统中已存在的串口,可以看到,我的系统中存在ttyS2这个串口。

[root@localhost ~]# dmesg | grep tty
console [tty0] enabled            //这个tty0我暂时没搞懂他是什么,但他肯定不是一个物理串口
serial8250: ttyS2 at I/O 0x3e8 (irq = 4) is a 16550A
00:04: ttyS2 at I/O 0x3e8 (irq = 4) is a 16550A

Linux下卸载被进程占用的分区

有的时候在卸载目录时会看到类似下面的错误提示。

[root@localhost ~]# umount /mnt
umount: /mnt: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

这段信息是告诉你,设备正在被使用,无法卸载。此时,想卸载掉这块分区唯一的方法就是杀死占用他的进程。

先找出是谁在占用这块分区,可以看到这里占用他的是进程号为1341的进程,后面的c代表的是进程的权限,不予理会。

[root@localhost ~]# fuser /mnt
/mnt: 1341c

使用kill -9杀死该进程后即可成功卸载磁盘

[root@localhost ~]# kill -9 1341
[root@localhost ~]# umount /mnt
[root@localhost ~]# df
Filesystem                   1K-blocks    Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root  19166504 3280692  14912196  19% /
tmpfs                           243140       0    243140   0% /dev/shm
/dev/sda1                       495844   33455    436789   8% /boot

CentOS 6下不重启系统就识别新增加的SCSI磁盘的方法

执行以下命令重新扫描SCSI磁盘,若重新扫描后依然没有看到新增加的磁盘,则将路径中的host0改为host1、host2、host3、host4…直到看到新的磁盘为止(我做这个实验的时候试到host2才扫描到)。

[root@localhost ~]# echo "- - -" > /sys/class/scsi_host/host0/scan

查看硬盘是否被扫描到,可以看到这里多了一块”sdb”就是我新增加的SCSI磁盘。

[root@localhost ~]# lsblk
NAME                        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                            8:0    0   20G  0 disk
├─sda1                        8:1    0  500M  0 part /boot
└─sda2                        8:2    0 19.5G  0 part
  ├─VolGroup-lv_root (dm-0) 253:0    0 18.6G  0 lvm  /
  └─VolGroup-lv_swap (dm-1) 253:1    0  960M  0 lvm
sr0                           11:0    1  4.2G  0 rom  /media/cdrom
sdb                            8:16   0   20G  0

disk

Linux在不重启系统的情况下重新挂载根目录下的分区

当修改了/etc/fstab中的分区挂载参数后需要卸载分区并重新挂载,这对于普通分区还好说,但是对于挂载在根目录下的分区呢?如果冒然卸载掉会导致系统无法运行。那,除了重启系统之外还有什么方法可以使修改的分区自动挂载参数立即生效呢?

这里可以使用mount命令的remove选项来实现重新挂载分区的功能~

[root@localhost ~]# mount -o remove /

Linux下创建及调整swap分区

swap分区简介:

Linux下的swap分区类似于Windows下的虚拟内存,都是当物理内存不够用时临时充当“内存”角色的一块磁盘空间。

Linux下增加及新建swap分区有两种方法,一种是基于硬盘分区的方式,另一种是基于文件的方式。

1、基于磁盘分区的swap

要增加基于分区的swap分区,首先得保证你有一块空余的磁盘空间可供分区,这里因为我是在虚拟机环境下实验,所以直接新增一块8G的硬盘用于分区。

下面是操作过程,每一步都有注释。

[root@localhost ~]# fdisk /dev/sdb             //使用fdisk分区工具为新增加的磁盘分区
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): n          //新建一个分区
Command action
   e   extended
   p   primary partition (1-4)
p           //新建为主分区
Partition number (1-4): 1            //分区编号为1
First cylinder (1-1044, default 1): 1              /分区起始扇区为1
Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044):             //这里我直接按回车了,使用全部可用磁盘空间
Using default value 1044
Command (m for help): t           //更改分区类型,默认类型为“Linux”,要将其更改为“Linux swap”
Selected partition 1            //如果存在多个分区,则这里会要求选择要操作的分区的编号,因为本实验中只有一个分区,所有直接默认是1
Hex code (type L to list codes): 82           //82就是“Linux swap”分区类型的编号,这里可以输入“list”查看所有分区类型对应的编号
Changed system type of partition 1 to 82 (Linux swap / Solaris)
Command (m for help): p          //查看刚刚划分的swap类型的分区
Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 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: 0xa8cc39af
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1044     8385898+  82  Linux swap / Solaris
Command (m for help): w          //保存对磁盘分区做的更改
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

将刚刚创建的分区格式化为swap文件系统。

[root@localhost ~]# mkswap /dev/sdb1
Setting up swapspace version 1, size = 8385892 KiB
no label, UUID=4b5f9371-3df6-47d5-bc40-15e6f7bb3db8

查看当前系统中启用的swap分区的大小。

[root@localhost ~]# free
             total       used       free     shared    buffers     cached
Mem:        502216      84088     418128          0       6892      31096
-/+ buffers/cache:      46100     456116
Swap:       835576          0     835576

启用新增加的swap分区之后再次查看系统中已生效的swap分区大小,可以发现,其完美增加了8个G~。

[root@localhost ~]# swapon /dev/sdb1
[root@localhost ~]# free
             total       used       free     shared    buffers     cached
Mem:        502216      90048     412168          0       6944      31088
-/+ buffers/cache:      52016     450200
Swap:      9221464          0    9221464

2、基于文件的swap

先使用dd命令生成一个2GB大小的文件。

[root@localhost ~]# dd if=/dev/zero of=/var/swap bs=1M count=2048
记录了2048+0 的读入
记录了2048+0 的写出
2147483648字节(2.1 GB)已复制,6.25394 秒,343 MB/秒</pre>
在这个文件上新建swap文件系统。
<pre>[root@localhost ~]# mkswap /var/swap
mkswap: /var/swap: warning: don't erase bootbits sectors
        on whole disk. Use -f to force.
Setting up swapspace version 1, size = 2097148 KiB
no label, UUID=344232eb-9654-4167-873b-bdda9d2b01e6

查看当前系统中生效的swap分区的大小。

[root@localhost ~]# free
             total       used       free     shared    buffers     cached
Mem:        502216     495380       6836          0       1056     438852
-/+ buffers/cache:      55472     446744
Swap:      9221464       8532    9212932

启用新建的swap分区,并查看系统中生效的swap分区的大小,可以发现,增加了2G。

[root@localhost ~]# swapon /var/swap
[root@localhost ~]# free
             total       used       free     shared    buffers     cached
Mem:        502216     496256       5960          0       1152     437816
-/+ buffers/cache:      57288     444928
Swap:     11318608       8440   11310168

开机自动挂载swap分区:

将要开机挂载的swap分区加入到/etc/fstab文件中。

[root@localhost ~]# vim /etc/fstab

以下是修改后的文件内容,最后两行就是刚刚新建的swap分区,第三行是系统原本的swap分区。

/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1
UUID=143f17a3-2d07-44b9-a577-f1609d3fb0c0 /boot                   ext4    defaults        1 2
/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
/dev/sdb1               swap                    swap    defaults        0 0
/var/swap               swap                    swap    defaults        0 0

停用swap分区:

先查看系统中已生效的swap分区的大小。

[root@localhost ~]# free
             total       used       free     shared    buffers     cached
Mem:        502216     494008       8208          0       3700     431888
-/+ buffers/cache:      58420     443796
Swap:     11318608       7472   11311136

停用掉系统中原本的swap分区,并查看系统中生效的swap分区的大小,可以发现少了800MB左右的空间。

[root@localhost ~]# swapoff /dev/VolGroup/lv_swap
[root@localhost ~]# free
             total       used       free     shared    buffers     cached
Mem:        502216     495748       6468          0       3872     428504
-/+ buffers/cache:      63372     438844
Swap:     10483032         88   10482944

Python小程序-写一个计算一元二次方程的程序函数

题目要求:

请定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程:ax^2 + bx + c = 0的两个解。

程序代码:

这只是一个函数,如果你不调用它的话,是不会产生任何输出的。

import math
def quadratic(a, b, c):
    if not (isinstance(a,(int,float)) and isinstance(b,(int,float)) and isinstance(c,(int,float))):
        return '请输入数字'
    else:
        d = -c + (b/2) ** 2
    if d &lt; 0:
        return '无解'
    else:
        x1 = round((math.sqrt(d) - (b/2)) / a , 2)
        x2 = round((-math.sqrt(d) - (b/2)) / a , 2)
        return x1,x2

小结:

求数字的平方根可以使用math.sqrt()函数,需引入math模块。

IP地址的子网掩码划分方法总结

1、利用子网数目计算子网掩码

问:192.168.0.0这个网段要分30个子网,计算其子网掩码。

答:将30转换为二进制形式,是‭11110‬,这样就将网络位向后拉5位,变成,11111111.11111111.11111000.00000000,转为十进制就是255.255.248.0。

需要注意的是,如果网络数转换出的二进制中只包含一个1,那么所统计的网络位就要减一位。例如要分16个网络,其对应的二进制是10000,这样其对应的网络位就应该是四位(四个二进制1正好是16,如果对应5个二进制1则就是32啦!)。

2、利用主机数目计算子网掩码

问:172.16.100.0/24这个IP地址所在的网段划分成若干子网络,每个子网络能容纳500台主机,它的子网掩码是多少?

答:先将500转换为二进制形式,是‭111110100‬,一共九位,这样就将主机位从最后往前推九位,变为11111111.11111111.11111110.00000000,转为十进制也就是255.255.254.0。

小疑点:为什么这里不像利用子网数目计算子网掩码的时候那样,当主机位中只有一个1的时候,把统计的主机位数减去1?举个例子,要求网络中能容纳下16台主机,将其转换为二进制就是10000,如果此时将其统计为4个主机位,则可容纳的主机数是16,看似符合要求,但这16个地址是包含了网络位和广播位的!实际可用的地址只有14个,所以这里必须将其统计为5位,宁滥勿缺~

3、利用子网掩码计算最大有效子网数

问:B类网,当子网掩码为255.255.192.0时,其可划分的有效的子网数是多少。

答:先将192转换为二进制形式,是11000000,网络位一共有两个,其组合形式一共有2的2次方个,也就是4个。

4、利用子网掩码计算最大可用主机数

问:子网掩码为255.255.248.0的网段中可容纳的最大主机数是多少。

答:将子网掩码转换为二进制形式,是11111111.11111111.11111000.00000000,可以看到,主机位一共有十一位,那么可容纳的主机数就是2的11次方(包括网络地址和广播地址),也就是2048,可用主机数是2046。

5、利用子网掩码确定子网络的起止地址

问:B类IP地址172.16.0.0,当子网掩码为255.255.192.0时,它所能划分的子网络起止地址是多少?

答:将子网掩码转换为二进制形式,是11111111.11111111.11000000.000000,观察网络位中最后一位1,其对应的十进制数字是64,那么该子网的子网段就是以64为倍数递增的,所以,所有子网络的起止地址就是:

  • 172.16.0.0-172.16.63.255
  • 172.16.64.0-172.16.127.255
  • 172.16.128.0-172.16.191.255
  • 172.16.192.0-172.16.255.255

可用地址就是除去每个网段中的第一个网络位和最后一个广播位后剩下的。

附上一张IP地址与子网掩码及可用主机数的对应关系的表格

说明:该表格从互联网下载,原作者已无从考察,故在此不标明出处。

点我下载