Solaris和Linux的比较、区别、异同云云。。。
关于Solaris与Linux,特别是Red Hat Enterprise Linux (RHEL)的比较,是一个很老很老的话题,网上也有一大把的资料。今天这篇文章里面,就把我收集到的资料做个汇总,整理一下,作为日后参考。
前提
如不特殊说明,接下来提到的:
- Linux是指
Red Hat Enterprise Linux 6.x
和Red Hat Enterprise Linux 7.x
- Solaris是指
Oracle Solaris 11.3
目的
曾经以为Solaris和Linux可以使用同样的命令,基本没什么差别,直到碰到下面的问题。。。
- 重启Solaris系统的正确命令是什么?
- 想修改一下系统的IP地址,怎么搞?
- 想看看某一个服务起没起来?
- ZFS又是什么东东?
- 怎么搞虚拟环境?
- ……
如果你对上面的问题的答案还不是很有把握,那么请继续往下看吧。
系统启动和关机
这里不得不先说一下运行级别(runlevel)。其实RHEL6和Solaris都定义了0~6的运行级别(准确的说Solaris中有8个运行级别),但每个运行级别的含义是不一样的。而从RHEL7开始,不再提运行级别,变成了target。三者具体比较如下表:
运行级别 | RHEL7的target | Linux中的含义 | Solaris中的含义 | 说明 |
---|---|---|---|---|
0 | poweroff.target | 关掉电源 | 电源关闭状态 | - |
s(或者S) | - | - | 单用户模式 | - |
1 | rescue.target | 单用户模式 | 管理状态 | - |
2 | - | 未使用 | 多用户状态 | 无NFS服务 |
3 | multi-user.target | 多用户模式 | 共享 NFS 资源的多用户级别 | Solaris默认 |
4 | - | 未使用 | 替换多用户状态 | 在缺省情况下未配置,但是可供客户使用 |
5 | graphical.target | X Window | 电源关闭状态 | Linux默认 |
6 | reboot.target | 系统重启 | 重新引导状态 | - |
对于上表,只需记住Solaris中 0是关机,s是单用户,3是多用户,5是断电,6是重启。
系统启动流程
Linux
RHEL6
- 加载BIOS,取得第一个启动设备
- 读取MBR(硬盘第0磁道第一扇区),读入预启动信息和分区表,启动Boot Loader: GRUB
- 根据GRUB的设置
/boot/grub/grub.cfg
加载内核,内核开始检测和加载驱动程序 - 内核主动调用
/sbin/init
进程,进入用户层,init会通过/etc/inittab
取得runlevel信息 - init执行
/etc/rc.d/rc.sysinit
脚本,该脚本会设定PATH变量,配置网络,激活swap分区,设定/proc,挂载文件系统等等,并准备软件的运行环境 - init根据
/etc/modules.conf
和/etc/modules.d
来装载内核模块 - init 依次执行 与当前runlevel对应的脚本(rc0.d~rc6.d)以启动服务
- init执行
/etc/rc.d/rc.local
,完成用户自定义的初始化脚本 - 执行
/bin/login
,等待用户登陆
RHEL7
- 加载BIOS,取得第一个启动设备
- 读取MBR(硬盘第0磁道第一扇区),读入预启动信息和分区表,启动Boot Loader: GRUB2
- 根据GRUB2的设置
/boot/grub2/grub.cfg
加载内核以及initramfs,初始化initramfs中的硬件 - 内核主动调用
systemd
的初始化进程/sbin/init
(指向/lib/systemd/systemd
的软链接),systemd通过执行/usr/lib/systemd/system/initrd.target
,实例化initramfs(包括挂载root文件系统到/sysroot
) - 内核root文件系统从initramfs切换到正常的文件系统(
/sysroot.systemd
) - systemd根据
/etc/systemd/system/default.target
软链接的指向,来启动到对应的运行级别 - systemd会自动解决启动单元之间的依赖关系,挂载文件系统,按需并发 启动各个服务
- systemd执行
/bin/login
,等待用户登陆
Solaris
为简单起见,只分析x86/64平台下,从磁盘设备的启动流程:
- 开机通电
- BIOS进行硬件自检和初始化,用户可以修改BIOS设置,并设置启动设备
- 因为从磁盘启动,所以会加载MBR,运行设备上的启动器,即GRUB Stage 1,在Linux上可以选择其他的启动器,但是在Solaris上,只能是GRUB。GRUB Stage 1会定位到Stage 2,并运行之
- 显示启动界面,列出GRUB配置文件
/boot/grub/grub.cfg
中定义的各个启动环境,特别是使用ZFS的话,往往会有多个不同的启动环境(BE, boot environment)。此时,用户可以选择或者编辑启动菜单,修改启动选项等等。注意,在Solaris中的GRUB已经被改进以支持从ZFS启动 - GRUB加载引导归档文件,装入并执行内核
- 识别并导入根池(
rpool
):如果可用,从固件可访问设备导入根池;否则,标识根池路径,确认引导归档文件和根池OS实例匹配,然后导入根池 - 挂载根文件系统(
/
) - 内核运行
/sbin/init
进程,init进程启动,并读取svc:/system/environment:init
SMF 服务中定义的属性,以设置任何环境变量。缺省情况下,仅设置 TIMEZONE 变量 - init会从运行级别(runlevel)1开始,依次运行(s –> 1 –> 2 –> 3) 到指定的运行级别。在
/etc/inittab
文件中,缺省的运行级别指定为运行级别 3 - 系统引导到多用户状态(运行级别 3)时,init 读取
/etc/inittab
文件并执行下列操作:- 执行 action 字段中包含 sysinit 的所有进程项,以便在用户登录系统之前执行所有特殊的初始化
- 启动
svc.configd
和svc.startd
,并将启动活动传递到svc.startd
svc.startd
启动各个服务- init执行
/bin/login
,等待用户登陆
系统关机和重启
RHEL6:
1 | # shutdown -h now -- 关机 |
RHEL7中也可以继续使用上面的命令,但是推荐使用systemctl
。
1 | # systemctl poweroff -- 关机 |
而在Solaris中,也有一个 shutdown
命令,但是选项变了。比如:
-g
用来指定多少秒之后关机-i
用来指定是执行关机命令还是重启命令
1 | # shutdown -y -g0 -i5 -- 关机 |
总结起来,就是下面这张表:
基本操作 | RHEL6 | RHEL7 | Solaris |
---|---|---|---|
启动 | 从GRUB菜单启动 | 从GRUB2菜单启动 | 从OPB环境中执行启动命令 {0} ok boot |
启动到单用户模式 | 修改启动选项 kernel /vmlinuz-… root=…1 |
修改启动选项 systemd.unit=rescue.target |
从OPB环境中启动到单用户模式 {0} ok boot -s |
关机 | shutdown -h now | systemctl poweroff | shutdown -y -g0 -i5 |
重启 | shutdown -r now | systemctl reboot | shutdown -y -g0 -i6 |
其他实例 | 在10点关机: shutdown -h 10:00 5分钟后关机:shutdown -h +5 |
系统挂起: systemctl suspend 系统休眠: systemctl hibernate |
从网络启动: {ok} boot net:dhcp 30秒后重启:shutdown -y -g30 -i6 |
启动环境管理
在Linux中,通过GRUB可以选择系统升级之前的旧版本内核启动,以实现一台机器有多个启动环境的功能。而在Solaris中,对应的功能就叫做BE(Boot Environment)。BE被用来创建,删除,复制启动环境。Solaris BE通过下面的步骤来管理启动环境:
- 获取现有的启动环境BE0的一个快照(snapshot),创建新的启动环境BE1。由于BE0和BE1使用的是快照,指向同一块存储区域,新的启动环境BE1并不会占用存储空间
- 系统重启后,选择BE1启动,就可以切换到新的启动环境BE1中。现在BE1处于激活状态,在这个环境下的数据更新会消耗BE1指向的存储空间
- 这时可以重启,切换回数据更新之前的BE0环境
如何通过BE恢复系统呢?举个例子:
假如已经进入系统中,先在BE中确认当前BE名称。注意 solaris-2
这个环境中,状态为NR
,其中N
表示现在的启动环境,R
表示下次的启动环境。
1 | # beadm list |
选择更新前solaris-1
环境,重启系统:
1 | # beadm activate solaris-1 |
再假如还没有进入系统,在OBP上指定BE启动的话,先用boot -L
命令在OBP中参看可用的BE,并选择更新前的BE。
1 | {0} ok boot -L |
输入启动命令:
1 | {0} ok boot -Z rpool/ROOT/solaris-1 |
软件包管理
Linux和Solaris的软件包管理原理基本相同,可以从安装介质中直接获取安装包,也可以从提供商的软件仓库中通过网络安装软件包。总结起来就是下面这张表:
基本操作 | Linux | Solaris |
---|---|---|
检查更新 | yum check-update | pkg update -nv |
更新软件包 | yum update 软件包名称 | pkg update 软件包名称 |
更新全部 | yum update | pkg update |
安装 | yum install 软件包名称 | pkg install 软件包名称 |
搜索 | yum search 关键字 | pkg search 关键字 |
已安装软件一览表 | yum list all | pkg list |
获取软件包信息 | yum info 软件包名称 | pkg info 软件包名称 |
值得注意的是,Solaris中,软件更新时可以结合使用上述的BE功能,确保软件更新中发生问题时也能恢复到软件更新前的状态。但是要记住BE并不是系统备份,如果发生了磁盘故障,还需要使用系统备份来恢复系统。
用户管理
在Solaris和Linux中可以使用命令行来管理用户,当然,也有基于GUI的用户管理界面。
用户管理的命令名称(如useradd
,usermod
, userdel
)是相同的,但是选项是有差别的。此外,对于root,在Linux中是以用户(user)方式对待的,基本上所有的一般用户都可以变成root用户(使用sudo
, su
或者编辑visudo
等等);而在Solaris中,root通常作为一个角色而存在(当然也可以创建root用户),而且只有特定的一般用户才能赋予root的角色。在Linux中,默认情况下,每个用户都属于与其同名的一个用户组;而Solaris中,用户除了用户组除外,还要属于某一个Project。
Project是Solaris用来做系统资源限制的单位。无论用户属于哪一个Project,用户执行的应用程序和进程都会受到所属Project中设定的资源限制的制约。通过Project,系统中应用程序和中间件的资源消耗都可以以用户为单位来进行限制。
Solaris中登陆时的用户身份认证
在Solaris中,本地身份认证文件也有下面两种:
- 用户账户信息:
/etc/passwd
中保存 - 用户密码信息:
/etc/shadow
中加密保存,Solairs默认使用SHA-256加密算法,而Linux使用SHA-512
用户账户和密码修改时,不会直接编辑上面的文件,而是通过使用usermod
, passwd
等命令来进行。
Solaris用户登陆时,通过/etc/default/login
文件来设置登录参数:
CONSOLE
一旦设定,只有指定的设备上才能以超级用户身份登陆PATH
初始化SHELL的PATH环境变量SUPATH
超级用户使用的初始化SHELL中PATH环境变量TIMEOUT
登陆会话结束为止的超时设定SLEEPTIME
登陆失败信息显示为止的等待时间RETRIES
登陆重试次数
用户密码的有效期
Linux中使用chage
来设定用户密码期限,而Solaris中使用passwd
。
基本操作 | Linux | Solaris |
---|---|---|
设置最长天数 | chage -M 90 用户名 | passwd -x 90 用户名 |
设置最短天数 | chage -m 30 用户名 | passwd -n 30 用户名 |
显示密码期限信息 | chage -l 用户名 | passwd -s 用户名 |
总结
基本操作 | Linux | Solaris |
---|---|---|
创建用户 | useradd 用户名 | 同左 |
修改用户 | usermod -u 新UID 用户名 | 同左 |
删除用户 | userdel 用户名 | 同左 |
显示密码有效期 | chage -l 用户名 | passwd -s 用户名 |
设置密码有效期 | chage -m 60 用户名 | passwd -x 60 用户名 |
修改用户信息 | chfn | passwd -g |
修改默认的shell
Linux和Solaris中,用户的默认shell都是bash。要修改用户user01的默认shell,在Linux中可以执行chsh user01
,在Solaris中可以使用 passwd -e user01
并修改对应的选项。
网络管理
这一部分的变化很大,主要区别如下:
网络管理内容 | RHEL6 | RHEL7 | Solaris |
---|---|---|---|
配置IP地址 | 修改配置文件,重启网络服务 | nmcli |
通过ipadm 配置,配置文件自动更新 |
网卡名称 | ethXX,如eth0,eth1 | 通过物理设备的连接信息自动生成,如ens1p1,enp0s25 | 基于物理设备的逻辑设备名称netXX,如net0,net1 |
数据链路层管理 | ethtool |
同左 | dladm |
IP层管理 | ifconfig |
ip |
ipadm |
网卡绑定 | Bonding | 同左 | IPMP |
各个命令的说明
Solaris
dladm
- 数据链路层的管理命令,可以用来创建虚拟网卡接口,设定网络冗余等。ipadm
- IP层的管理命令,以接口名称/任意字符串
的形式管理IP地址对象,可以对IP地址对象进行设置,参数操作。
Linux
- RHEL6中的
ifconfig
- 表示网络设置和状态的命令。 - RHEL7中的
nmcli
- 管理和设置网络的命令,可以进行hostname,IP地址,激活和禁止网卡,创建网卡接口等操作。 - RHEL7中的
ip
- 其实就是统一了RHEL6中的ifconfig
,route
,netstat
,arp
的命令。
各个命令的比较
创建网卡接口和设置IP地址
在RHEL6中:
1 | # ifconfig <interface> <addr> netmask <netmask> |
在RHEL7中:
1 | # nmcli c add type eth ifname <interface> con-name <string> |
在Solaris中:
1 | # ipadm create-ip <interface> |
在RHEL7中,通过nmcli
设置后,会自动更新网卡的配置文件;在Solaris中,通过ipadm
设置的话,也会自动更新配置文件。
显示IP地址
1 | # ifconfig -- RHEL6 |
Solaris中配置网络的过程
1 | # dladm show-link -- 确认网络接口的状态 |
Solaris下网卡绑定 - IPMP
IPMP,IP Multipathing,是与Linux下的Bonding等同的功能,作为Solaris的系统特性之一,它将几个网络接口绑定在一起作为一个IPMP组,实现网络接口的冗余。即使其中的一个网络接口发生故障,IPMP上的正承担数据服务的IP不会丢失,会failover到其他接口上,避免了单点网络连接故障。IPMP可用于Oracle RAC的公用网络或私有网络上。IPMP技术说到底是提供了避免单点网络连接故障的一个 检测-失败-切换 的机制。
在配置IPMP时,有两种模式:Active-Active
模式和Active-Standby
模式。在Active-Active
模式中所有网络接口都要在线处于active状态;在Active-Standby
模式中,至少有一个网络接口在线处于active状态,其他网络接口处于standby状态。
拿Active-Standby
模式举个为例,配置过程如下:
创建两个网卡接口: net0 和 net1为一对要绑定的网卡
1
2# ipadm create-ip net0
# ipadm create-ip net1配置IPMP接口
1
2
3# ipadm create-ipmp ipmp0
# ipadm add-ipmp -i net0 -i net1 ipmp0
# ipadm create-addr -T static -a local=192.168.78.10/24 ipmp0/v4指定net1为其中的Standby接口
1
# ipadm set-ifprop -p standby=on -m ip net1
总结
基本操作 | RHEL6 | RHEL7 | Solaris |
---|---|---|---|
设置IP | # vi /etc/sysconfig/network-scripts/ifcfg-eth0 IPADDR=192.168.78.113 # service network restart |
# nmcli con mod enp0s25 ipv4.method manual ipv4.addresses “192.168.78.113/24 192.168.78.254” | # ipadm create-addr -T static -a local=192.168.78.113/24 net1/v4 |
设置DHCP | # vi /etc/sysconfig/network-scripts/ifcfg-eth0 BOOTPROTO=dhcp # service network restart |
# nmcli con mod enp0s25 ipv4.method auto | # ipadm create-addr -T dhcp net1 |
查看IP | # ifconfig | # ip addr | # ipadm show-addr |
配置网关 | # vi /etc/sysconfig/network GATEWAY=192.168.78.254 # serice network restart |
# nmcli con mod enp0s25 ipv4.gateway 192.168.78.254 | # route -p add 192.168.78.113 192.168.78.254 |
查看网关 | # netstat -rn | # ip route | # netstat -rn |
查看网卡 | # ethtool eth0 | # nmcli device status | # dladm show-link #dladm show-phys |
后台服务管理
这里差别也比较大,需要分开说了。
RHEL6
RHEL6的服务管理方法相当于Solaris 9以前的旧服务管理方法,主要是通过在系统启动时,按照runlevel,顺次执行/etc/init.d/
目录下的各种服务启动脚本(rc脚本)的方法来进行管理的。各个服务间的依赖关系需要通过启动脚本来控制。
服务的启动与开机自动启动的配置是由两个命令来完成的:
1 | # service httpd start -- 启动服务 |
RHEL7
RHEL7中是通过systemd这个服务管理器来 按需并发启动 服务,systemd改善了服务之间依赖关系的管理,大大地缩短了系统启动时间。也可以把重要服务的启动顺序调高,确保优先启动。
服务的启动与开机自动启动的配置只需要systemctl
命令。
1 | # systemctl start postfix.service -- 启动服务 |
Solaris
Solaris中是通过SMF(Service Management Facility)这个工具来管理服务的。SMF可以管理服务间的依赖关系,能够保证某个服务启动或停止时,其所依赖的服务事先启动或停止。有自我修复功能,也就是说当某个服务由于系统故障停止了,SMF会自动重启这个服务。SMF的功能很强大,不仅仅可以启动和停止服务,还可以对运行中的服务进行监视,在出现问题时,SMF还可以用来查看导致某个服务停止,或者对某个服务产生影响的其他服务。同时,为了保持与旧版本的兼容性,Solaris也支持通过调用rc脚本来启动和管理服务的方式。
- SMF中管理的服务启动脚本在
/lib/svc/method
目录下,通过svc.startd
后台进程来统一启动 - 服务间依赖关系文件在
/var/svc/manifest
目录下,以组为单位,由svc.configd
后台进程来读取和修改 - 由SMF管理的日志文件在
/var/svc/log
目录下,以服务为单位生成日志文件 - 没有依赖关系的服务并发启动,有依赖关系的服务按照依赖关系依次启动
- 作为遗留功能,也会根据runlevel来启动对应的rc脚本
服务的启动与开机自动启动的配置只需要svcadm
命令。但与Linux不同的是,Solaris中服务一旦启动或者停止,下次开机时会继续保持启动或停止的状态。如果不想保持服务启停状态的话,需要使用-t
选项,来暂时启动或者停止服务。
1 | # svcadm enable -t httpd -- 启动服务 |
总结
基本操作 | RHEL6 | RHEL7 | Solaris |
---|---|---|---|
启动服务 | service 服务名 start | systemctl start 服务名 | svcadm enable -t 服务名 (FMRI) |
启动+开机自动启动 | service 服务名 start chkconfig 服务名 on |
systemctl start 服务名 systemctl enable 服务名 |
svcadm enable 服务名(FMRI) |
停止服务 | service 服务名 stop | systemctl stop 服务名 | svcadm disable -t 服务名 (FMRI) |
停止+禁止开机自动启动 | service stop 服务名 chkconfig 服务名 off |
systemctl stop 服务名 systemctl disable 服务名 |
svcadm disable 服务名 (FMRI) |
查看服务列表 | chkconfig –list | systemctl list-unit-files –type service | svcs -a |
查看服务状态 | service 服务名 status | systemctl status 服务名 | svcs 服务名(FMRI) |
其中,FMRI是指 Fault Managed Resource Identifier。
文件系统和存储
由于使用的文件系统格式不一样,这一部分的差别也很大,概括来说如下:
RHEL6 | RHEL7 | Solaris | |
---|---|---|---|
存储(卷)管理器 | LVM, Logical Volumn Manager | 同左 | ZFS, Zetta byte File System zpool 命令 |
文件系统 | ext3(推荐), ext4 | XFS | ZFS, zfs 命令 |
最大文件系统 | 16TB | 500TB | 256千万亿ZB(1ZB=10亿TB) |
最大文件 | 2TB(ext3), 16TB(ext4) | 500TB | 256千万亿ZB(1ZB=10亿TB) |
冗余 | 基本上通过使用主机本身或者存储器的RAID硬件 | 同左 | 可使用ZFS的软件RAID,也可使用存储器的RAID硬件 |
Linux的卷管理 - LVM
关于这部分的详细介绍,请参考本站的这篇文章。
Solaris的卷管理 - ZFS
Solaris的文件系统、卷管理器都使用ZFS。与传统的文件系统不同,ZFS有下面的几个特点:
- 由若干个物理磁盘组成一个存储池(pool)
- 从存储池中再分割出数据集,在分割数据集的同时会以ZFS格式的文件系统挂载到系统中的同名目录下
- 文件系统的大小会随着存储池的容量的增加而自动扩容
- 在系统运行时,就可以通过快照功能取得系统备份
ZFS支持的RAID类型如下:
- Stripe: 与 RAID 0 类似,传说中的带条,需要至少一块硬盘。
- Mirror: 与 RAID 1 类似,磁盘镜像,需要至少两块硬盘。
- RAID-Z1: 与 RAID 5 类似,一重奇偶校验,需要至少三块硬盘。
- RAID-Z2: 与 RAID 6 类似,双重奇偶校验,需要至少四块硬盘。
- RAID-Z3: 三重奇偶校验,独门秘籍,需要至少五块硬盘。
其中:
- 性能对比:Stripe > Mirror, Stripe > RAIDZ1 > RAIDZ2 > RAIDZ3
- 数据可靠性:Mirror > Stripe,RAIDZ3 > RAIDZ2 > RAIDZ1 > Stripe
ZFS的快照(Snapshot)功能
快照(Snapshot)是文件系统或卷的只读副本。在ZFS中,快照几乎可以即时创建,而且最初不会额外占用池中的磁盘空间。但是,当活动数据集中的数据发生更改时,快照通过继续引用旧数据占用磁盘空间,从而阻止释放该空间。
- 自动使用空闲空间,无需指定快照的存储区域
- 只写入有更新的数据时,才会占用少量的存储空间
- 创建快照的操作可以回滚(rollback功能)
- 快照可以恢复到原始状态(backup功能)
- 可以使用快照来复制文件(clone功能)
ZFS命令
- 备份:
zfs send
无需停机,在线状态下将快照作为系统备份输出到标准输出 - 恢复:
zfs receive
从标准输入接收备份数据流,进行文件系统恢复。如果不是恢复根目录(/
),则无需停机。
总结
基本操作 | RHEL6 | RHEL7 | Solaris |
---|---|---|---|
Linux:创建卷组 Solaris:创建存储池 |
vgcreate 卷组名 设备名 | 同左 | zpool create 池名 RAID设备名 |
Linux: 创建逻辑卷 Solaris:创建ZFS文件系统 |
lvcreate -L 大小 -n 逻辑卷名 卷组名 | 同左 | zfs create 文件系统名 |
创建快照 | lvcreate -s L 大小 -n 快照名 元设备 | 同左 | zfs snapshot 快照名 |
恢复到快照 | lvconvert –merge 快照名 | 同左 | zfs rollback 快照名 |
文件系统备份 | dump -0u -f 备份设备 备份源 0 代表备份级别(0-9),为完全备份 |
xfsdump -l 备份级别(0-9) -f 备份设备 备份源 | zfs send 快照名 |
文件系统恢复 | restore -r -f 备份文件 | xfsrestore -f 备份文件 -s 会话标识 恢复目标 | zfs receive 快照数据流 |
分区 | parted(推荐),fdisk | 同左 | format |
补充1 - Solaris的卷标和设备路径
Solaris支持以下两种卷标方式:
SMI
,Sun Microsystems Inc.:系统卷使用的卷标,最大支持2TB的磁盘EFI(GPT)
, Extensible Firmware Interface GUID Partition Table:系统卷之外的ZFS使用的卷标
Solaris的磁盘路径在/dev/(r)disk
目录下,格式如下:
1 | /dev/[r]dsk/cXtXdXsX |
其中:
- dsk 块设备
- rdisk 字符设备(raw设备)
- c 逻辑控制器,X指磁盘控制器
- t 物理总线目标,X指磁盘的目标号
- d 磁盘或逻辑单元(LUN)号
- s 分区号,X指磁盘上的分区号
补充2 - 磁盘分区
在Linux中,一块磁盘可以分成多个分区,每个分区可以作为文件系统或裸设备来使用。磁盘分区时可以使用fdisk
命令。
在Solaris中,分区(Partition)被称为Slice
,Slice
数的多少取决于使用了哪种类型的卷标(SMI,还是EFI)。设备名称后加s0~s7
来作为设备路径名。在SMI中,s2为特殊的Slice,表示磁盘全体Slice。可以使用format
命令来对磁盘进行分区操作。
补充3 - 挂载ISO文件
在Linux下,ISO文件挂载时需要指定文件系统格式为iso9660
,比如:
1 | # mount -o loop -t iso9660 /ISO/media.iso /mnt |
在Solaris中,ISO文件的文件系统格式则为hsfs
:
1 | # mount -F hsfs /ISO/media.iso /mnt |
补充4 - Solaris的文件系统构成
除ZFS之外的文件系统,系统启动时会根据/etc/vfstab
中的定义自动挂载。Solaris中主要的目录及说明如下:
名称 | 说明 |
---|---|
/dev | 包含特殊设备文件的目录 |
/devices | devfs文件系统的挂载点 |
/etc | 系统管理及其配置文件目录 |
/bin | 普通用户可执行文件目录 |
/sbin | 启动进程,以及系统手动恢复时的可执行文件目录 |
/usr/lib | 应用程序执行时需要的系统库文件 |
/proc | 进程文件系统挂载点,存储进程运行时信息 |
/tmp | 临时文件目录。内存文件系统使用tmpfs格式 |
注意,swap
和dump
设备由ZFS卷构成;而/tmp
中的文件会占用物理内存,而且重启后该目录下的数据会丢失。
系统监视
日志文件
在Linux中,系统消息日志文件在/etc/rsyslog.conf
中定义。
在Solaris中,系统消息日志文件在/etc/syslog.conf
中定义。与Linux相同,登陆用户可以查看系统消息日志,也可以将日志传送到其他服务器上。
日志 | Linux | Solaris |
---|---|---|
系统日志 | /var/log/messages | /var/adm/messages |
邮件记录日志 | /var/log/maillog | /var/log/syslog |
cron运行时日志 | /var/log/cron | /var/cron/log |
在处理日志文件轮替(logrotate)时,Linux和Solaris一样,都是以日志文件为单位,通过cron
定期执行日志轮替。
Linux中,在/etc/logrotate.conf
文件中定义:
1 | weekly # 每周 |
Solaris中,在/etc/logadm.conf
文件中定义:
1 | /var/adm/messages -C 4 -a '/usr/sbin/svccfg -s svc:/system/system-log refresh' |
其中 -C
指保存的日志文件数,-a
指日志文件名变化后执行单引号''
内的命令。
系统监视命令
可以使用系统命令来查看系统的性能信息(如CPU,内存使用量等)。此外,Solaris也有自己独特的系统监视命令。
例1:查看系统资源
操作 | Linux | Solaris |
---|---|---|
查看CPU,内存,新设备 | cat /proc/cpuinfo cat /proc/meminfo lspci |
prtdiag |
例2:系统异常诊断
操作 | Linux | Solaris |
---|---|---|
网络状态 | ethtool, ping | dladm, ping |
服务状态 | service(RHEL6) systemctl(RHEL7) |
svcs |
进程状态 | pstree, ps | ptree, ps |
进程追踪 | strace | truss |
例3:查看系统资源使用量
操作 | Linux | Solaris |
---|---|---|
系统运行时间 | uptime | uptime |
CPU,内存,IO负载 | mpstat, vmstat isostat, iotop, netstat |
mpstat, pgstat, vmstat, iostat, fsstat netstat, flowstat, dlstat, ipmpstat |
进程负载 | top, pidstat | top, prstat |
总结起来,记住下表的命令一般都够用了:
操作 | Linux | Solaris |
---|---|---|
CPU,内存,IO负载 | mpstat, vmstat, iostat | 同左 |
查看CPU,内存,新设备 | cat /proc/cpuinfo cat /proc/meminfo lspci |
prtdiag |
网络诊断 | ping | 同左 |
查看进程状态 | ps -ef | 同左 |
虚拟化
Linux下的虚拟化技术
Docker
Docker[^1](Docker中文 - http://www.docker.org.cn/book/docker/what-is-docker-16.html)是一个开源的应用容器引擎,在操作系统之上为应用程序创建一个的可移植的,完全隔离的空间(容器)。使用沙箱机制,容器之间不会有任何接口。Docker是一种轻量级的虚拟化技术,对硬件资源的消耗量少,即使在服务器虚拟化的环境中,性能也不会恶化。容器作为镜像来保存,可以批量部署在其他环境中,包括虚拟机(VMs)、物理机(bare metal)、OpenStack 集群和其他的基础应用平台。
KVM
作为Type-II虚拟化的Hypervisor,可以在操作系统之上创建各种客户机操作系统(Guest OS)。KVM基于虚拟化扩展(Intel VT或AMD-V)的x86硬件,是Linux原生的全虚拟化技术。KVM通过可加载的内核模块,支持各种客户机操作系统,如Linux,BSD,Solaris,Windows等。
在KVM构架中,虚拟机实现为常规的Linux进程,由标准的Linux调度进程进行调度,这使得KVM能够享受Linux的所有功能。
Solaris下的虚拟化技术
Solaris Zone
Solaris Zone是与Linux下的Docker相当的虚拟机技术。主要是通过在Solaris内核级别对系统资源进行分配和管理,来实现虚拟容器。由于所有的Zone都使用同一个内核,所以可以统一对所有的Zone进行修复或者打补丁。
Solaris Zone的特点是:
- 摆脱对硬件的依赖,理论上最多可部署8191个虚拟OS(容器)
- 虚拟OS的增加和删除操作简单,执行速度快
- 不需要对每一个虚拟OS都安装操作系统
- 可以灵活分配CPU,内存等硬件资源
- 免费使用
Oracle VM Server for SPARC
之前也称作Logical Domains,或者LDoms,这是Solaris中与Linux KVM相当的虚拟化技术。主要是通过利用SPARC处理器的硬件优势,在Firmware级别对系统资源进行分配和管理,作为Type-I虚拟化的Hypervisor来实现。其中,每一个虚拟化环境都称作一个Domain,不同的Domain可以使用不同内核,所以在Oracle VM中可以运行不同版本(包括不同的版本,不同的系统补丁)的Solaris系统。
Oracle VM Server for SPARC的特点:
- 同一环境下使用不同版本的Solaris系统
- 以Domain为单位,可以灵活的控制系统资源(CPU,内存,IO)分配
- Domain之间互相隔离,不受软件问题的影响
- 免费使用
比较一下
Docker和Solaris Zone
项目 | Docker | Solaris Zone |
---|---|---|
虚拟环境下支持的OS | 各种Linux发行版(RHEL,CentOS等) | 在Host为Solaris 11的条件下,可支持 Solaris10和Solaris11 |
虚拟化对客户机性能的影响 | 非常小 | 非常小 |
对虚拟环境的访问 | 需要专门的Docker客户端 | 不需要客户端,使用telnet,ssh都可以访问 |
KVM和Oracle VM Server for SPARC
项目 | KVM | Oracle VM Server for SPARC |
---|---|---|
虚拟环境下支持的OS | Windows,Linux,Solaris等各种OS | 在Host为Solaris 11的条件下,可支持 Solaris10和Solaris11 |
虚拟化对客户机性能的影响 | 比较大 | 非常小 |
虚拟环境下的命令
Docker:创建容器,删除容器
1 | # docker pull registry.access.redhat.com/rhel -- 下载容器镜像 |
Solaris Zone: 创建zone,删除zone
1 | # zonecfg -z Zone名 create -- 创建Zone的配置文件 |
KVM:创建客户机操作系统,关闭客户机
1 | # virt-install -各种参数 -- 生成客户机配置文件并安装系统 |
Oracle VM Server for SPARC: DomU的创建和关闭
1 | # ldm add-domain Domain名 -- 创建Domain |
参考文档
- SPARC Servers Techinical Park- http://www.fujitsu.com/jp/products/computing/servers/unix/sparc/technical/
- Oracle Solaris 11.3 Information Library (简体中文): https://docs.oracle.com/cd/E62103_01/
- KVM - https://www.redhat.com/en/files/resources/en-rh-kvm-kernal-based-virtual-machine.pdf
- RHEL7 Admin Guide - https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/index.html
- 高速启动,现在开始systemd - http://mtoou.info/hing-systemd/
- 浅析 Linux 初始化 init 系统,第 3 部分: Systemd - https://www.ibm.com/developerworks/cn/linux/1407_liuming_init3/index.html
(END)