文章目录
  1. 1. 前提
  2. 2. 目的
  3. 3. 系统启动和关机
    1. 3.1. 系统启动流程
      1. 3.1.1. Linux
    2. 3.2. Solaris
    3. 3.3. 系统关机和重启
    4. 3.4. 启动环境管理
  4. 4. 软件包管理
  5. 5. 用户管理
    1. 5.1. Solaris中登陆时的用户身份认证
    2. 5.2. 用户密码的有效期
    3. 5.3. 总结
    4. 5.4. 修改默认的shell
  6. 6. 网络管理
    1. 6.1. 各个命令的说明
      1. 6.1.1. Solaris
      2. 6.1.2. Linux
    2. 6.2. 各个命令的比较
      1. 6.2.1. 创建网卡接口和设置IP地址
      2. 6.2.2. 显示IP地址
      3. 6.2.3. Solaris中配置网络的过程
      4. 6.2.4. Solaris下网卡绑定 - IPMP
    3. 6.3. 总结
  7. 7. 后台服务管理
    1. 7.1. RHEL6
    2. 7.2. RHEL7
    3. 7.3. Solaris
    4. 7.4. 总结
  8. 8. 文件系统和存储
    1. 8.1. Linux的卷管理 - LVM
    2. 8.2. Solaris的卷管理 - ZFS
      1. 8.2.1. ZFS的快照(Snapshot)功能
      2. 8.2.2. ZFS命令
    3. 8.3. 总结
    4. 8.4. 补充1 - Solaris的卷标和设备路径
    5. 8.5. 补充2 - 磁盘分区
    6. 8.6. 补充3 - 挂载ISO文件
    7. 8.7. 补充4 - Solaris的文件系统构成
  9. 9. 系统监视
    1. 9.1. 日志文件
    2. 9.2. 系统监视命令
  10. 10. 虚拟化
    1. 10.1. Linux下的虚拟化技术
      1. 10.1.1. Docker
      2. 10.1.2. KVM
    2. 10.2. Solaris下的虚拟化技术
      1. 10.2.1. Solaris Zone
      2. 10.2.2. Oracle VM Server for SPARC
    3. 10.3. 比较一下
      1. 10.3.1. Docker和Solaris Zone
      2. 10.3.2. KVM和Oracle VM Server for SPARC
    4. 10.4. 虚拟环境下的命令
      1. 10.4.1. Docker:创建容器,删除容器
      2. 10.4.2. Solaris Zone: 创建zone,删除zone
      3. 10.4.3. KVM:创建客户机操作系统,关闭客户机
      4. 10.4.4. Oracle VM Server for SPARC: DomU的创建和关闭
  11. 11. 参考文档

关于Solaris与Linux,特别是Red Hat Enterprise Linux (RHEL)的比较,是一个很老很老的话题,网上也有一大把的资料。今天这篇文章里面,就把我收集到的资料做个汇总,整理一下,作为日后参考。

前提

如不特殊说明,接下来提到的:

  • Linux是指 Red Hat Enterprise Linux 6.xRed 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

    1. 加载BIOS,取得第一个启动设备
    2. 读取MBR(硬盘第0磁道第一扇区),读入预启动信息和分区表,启动Boot Loader: GRUB
    3. 根据GRUB的设置/boot/grub/grub.cfg加载内核,内核开始检测和加载驱动程序
    4. 内核主动调用/sbin/init进程,进入用户层,init会通过/etc/inittab取得runlevel信息
    5. init执行/etc/rc.d/rc.sysinit脚本,该脚本会设定PATH变量,配置网络,激活swap分区,设定/proc,挂载文件系统等等,并准备软件的运行环境
    6. init根据/etc/modules.conf/etc/modules.d来装载内核模块
    7. init 依次执行 与当前runlevel对应的脚本(rc0.d~rc6.d)以启动服务
    8. init执行/etc/rc.d/rc.local,完成用户自定义的初始化脚本
    9. 执行/bin/login,等待用户登陆
  • RHEL7

    1. 加载BIOS,取得第一个启动设备
    2. 读取MBR(硬盘第0磁道第一扇区),读入预启动信息和分区表,启动Boot Loader: GRUB2
    3. 根据GRUB2的设置/boot/grub2/grub.cfg加载内核以及initramfs,初始化initramfs中的硬件
    4. 内核主动调用systemd的初始化进程/sbin/init(指向/lib/systemd/systemd的软链接),systemd通过执行/usr/lib/systemd/system/initrd.target,实例化initramfs(包括挂载root文件系统到/sysroot
    5. 内核root文件系统从initramfs切换到正常的文件系统(/sysroot.systemd
    6. systemd根据/etc/systemd/system/default.target软链接的指向,来启动到对应的运行级别
    7. systemd会自动解决启动单元之间的依赖关系,挂载文件系统,按需并发 启动各个服务
    8. systemd执行/bin/login,等待用户登陆

Solaris

为简单起见,只分析x86/64平台下,从磁盘设备的启动流程:

  1. 开机通电
  2. BIOS进行硬件自检和初始化,用户可以修改BIOS设置,并设置启动设备
  3. 因为从磁盘启动,所以会加载MBR,运行设备上的启动器,即GRUB Stage 1,在Linux上可以选择其他的启动器,但是在Solaris上,只能是GRUB。GRUB Stage 1会定位到Stage 2,并运行之
  4. 显示启动界面,列出GRUB配置文件/boot/grub/grub.cfg中定义的各个启动环境,特别是使用ZFS的话,往往会有多个不同的启动环境(BE, boot environment)。此时,用户可以选择或者编辑启动菜单,修改启动选项等等。注意,在Solaris中的GRUB已经被改进以支持从ZFS启动
  5. GRUB加载引导归档文件,装入并执行内核
  6. 识别并导入根池(rpool):如果可用,从固件可访问设备导入根池;否则,标识根池路径,确认引导归档文件和根池OS实例匹配,然后导入根池
  7. 挂载根文件系统(/
  8. 内核运行/sbin/init进程,init进程启动,并读取 svc:/system/environment:init SMF 服务中定义的属性,以设置任何环境变量。缺省情况下,仅设置 TIMEZONE 变量
  9. init会从运行级别(runlevel)1开始,依次运行(s –> 1 –> 2 –> 3) 到指定的运行级别。在 /etc/inittab 文件中,缺省的运行级别指定为运行级别 3
  10. 系统引导到多用户状态(运行级别 3)时,init 读取 /etc/inittab 文件并执行下列操作:
    • 执行 action 字段中包含 sysinit 的所有进程项,以便在用户登录系统之前执行所有特殊的初始化
    • 启动svc.configdsvc.startd,并将启动活动传递到 svc.startd
  11. svc.startd 启动各个服务
  12. init执行/bin/login,等待用户登陆

系统关机和重启

RHEL6:

1
2
# shutdown -h now -- 关机
# shutdown -r now -- 重启

RHEL7中也可以继续使用上面的命令,但是推荐使用systemctl

1
2
# systemctl poweroff -- 关机
# systemctl reboot -- 重启

而在Solaris中,也有一个 shutdown命令,但是选项变了。比如:

  • -g 用来指定多少秒之后关机
  • -i 用来指定是执行关机命令还是重启命令
1
2
# shutdown -y -g0 -i5 -- 关机
# shutdown -y -g0 -i6 -- 重启

总结起来,就是下面这张表:

基本操作 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
2
3
4
5
# beadm list
BE Active Mountpoint Space Policy Created
-- ------ ---------- ------ ------- -------
solaris-1 - - 9.67M static 2017-05-03 15:28
solaris-2 NR / 3.82G static 2017-05-03 16:02

选择更新前solaris-1环境,重启系统:

1
2
# beadm activate solaris-1
# shutdown -y -g0 -i6

再假如还没有进入系统,在OBP上指定BE启动的话,先用boot -L命令在OBP中参看可用的BE,并选择更新前的BE。

1
2
3
4
5
{0} ok boot -L
Boot device: /virtual-devices@100/channel-devices@200/disk@1 File and args: -L
1 solaris-1
2 solaris-2
Select environment to boot: [ 1 - 2 ]:1

输入启动命令:

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的用户管理界面。

用户管理的命令名称(如useraddusermoduserdel)是相同的,但是选项是有差别的。此外,对于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

用户账户和密码修改时,不会直接编辑上面的文件,而是通过使用usermodpasswd等命令来进行。

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
2
# nmcli c add type eth ifname <interface> con-name <string>
# nmcli c mod <interface> ipv4.method manual ipv4.addresses "<addr>/<prefixlen> <gateway>"

在Solaris中:

1
2
# ipadm create-ip <interface>
# ipadm create-addr -T static -a local=<addr>/<prefixlen> <interface>/<string>

在RHEL7中,通过nmcli设置后,会自动更新网卡的配置文件;在Solaris中,通过ipadm设置的话,也会自动更新配置文件。

显示IP地址

1
2
3
# ifconfig -- RHEL6
# ip address -- RHEL7
# ipadm show-addr -- Solaris

Solaris中配置网络的过程

1
2
3
4
5
6
7
# dladm show-link -- 确认网络接口的状态
LINK CLASS MTU STATE OVER
net0 phys 1500 up --
net1 phys 1500 up --
# ipadm create-ip net1 -- 创建网络接口
# ipadm create-addr -T static -a local=192.168.78.113/24 net1/v4 -- 配置IP地址
# ipadm show-addr -- 查看IP地址

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模式举个为例,配置过程如下:

  1. 创建两个网卡接口: net0 和 net1为一对要绑定的网卡

    1
    2
    # ipadm create-ip net0
    # ipadm create-ip net1
  2. 配置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
  3. 指定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
2
3
4
# service httpd start -- 启动服务
# service httpd stop -- 停止服务
# chkconfig httpd on -- 开机自动启动
# chkconfig httpd off -- 禁止开机自动启动

RHEL7

RHEL7中是通过systemd这个服务管理器来 按需并发启动 服务,systemd改善了服务之间依赖关系的管理,大大地缩短了系统启动时间。也可以把重要服务的启动顺序调高,确保优先启动。

服务的启动与开机自动启动的配置只需要systemctl命令。

1
2
3
4
# systemctl start postfix.service -- 启动服务
# systemctl stop postfix.service -- 停止服务
# systemctl enable postfix.service -- 开机自动启动
# systemctl disable 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脚本

Solaris SMF

服务的启动与开机自动启动的配置只需要svcadm命令。但与Linux不同的是,Solaris中服务一旦启动或者停止,下次开机时会继续保持启动或停止的状态。如果不想保持服务启停状态的话,需要使用-t选项,来暂时启动或者停止服务。

1
2
3
4
# svcadm enable -t httpd -- 启动服务
# svcadm disable -t httpd -- 停止服务
# svcadm enable httpd -- 启动服务,并且开机自动启动
# svcadm disable 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格式的文件系统挂载到系统中的同名目录下
  • 文件系统的大小会随着存储池的容量的增加而自动扩容
  • 在系统运行时,就可以通过快照功能取得系统备份

Solaris 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)被称为SliceSlice数的多少取决于使用了哪种类型的卷标(SMI,还是EFI)。设备名称后加s0~s7来作为设备路径名。在SMI中,s2为特殊的Slice,表示磁盘全体Slice。可以使用format命令来对磁盘进行分区操作。

Solaris Slice

补充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格式

注意,swapdump设备由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
2
3
4
5
6
7
8
9
weekly # 每周
rotate # 保留4个日志文件
compress # 压缩日志文件
/var/log/messages {
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}

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

Docker1是一个开源的应用容器引擎,在操作系统之上为应用程序创建一个的可移植的,完全隔离的空间(容器)。使用沙箱机制,容器之间不会有任何接口。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进行修复或者打补丁。

Linux Docker v.s. Solaris 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系统。

Linux KVM v.s. OVM

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
2
3
4
5
# docker pull registry.access.redhat.com/rhel -- 下载容器镜像
# docker run -it -h 容器名 rhel /bin/bash -- 通过容器名启动容器
[容器名]# -- 登陆到容器中
[容器名]# exit -- 登出容器
# docker rm 容器名 -- 删除容器

Solaris Zone: 创建zone,删除zone

1
2
3
4
5
6
7
# zonecfg -z Zone名 create -- 创建Zone的配置文件
# zoneadm -z Zone名 install -- 安装Zone
# zoneadm -z Zone名 boot -- 启动Zone
# zlogin -C Zone名 -- 登陆到Zone终端中
[Zone名]# ~. -- 登出Zone
# zoneadm -zZone名 shutdown -- 停止Zone
# zoneadm -zZone名 delete -- 删除Zone

KVM:创建客户机操作系统,关闭客户机

1
2
3
4
5
# virt-install -各种参数 -- 生成客户机配置文件并安装系统
# virsh start 客户机名 -- 启动客户机
# virsh console 客户机名 -- 登陆到客户机
[客户机名]# Ctrl+] -- 登出客户机
# virsh shutdown 客户机名 -- 关闭客户机

Oracle VM Server for SPARC: DomU的创建和关闭

1
2
3
4
5
6
7
# ldm add-domain Domain名 -- 创建Domain
# ldm set-core 2 Domain名 -- 分配Domain可以使用的CPU核心数
# ldm set-memory 4096M Domain名 -- 分配Domain可以使用的内存量
# ldm bind Domain名 -- 为Domain绑定系统资源
# ldm start Domain名 -- 启动Domain
# ldm stop Domain名 -- 停止Domain
# ldm unbind Domain名 -- 解除绑定在Domain上的系统资源

参考文档

(END)

文章目录
  1. 1. 前提
  2. 2. 目的
  3. 3. 系统启动和关机
    1. 3.1. 系统启动流程
      1. 3.1.1. Linux
    2. 3.2. Solaris
    3. 3.3. 系统关机和重启
    4. 3.4. 启动环境管理
  4. 4. 软件包管理
  5. 5. 用户管理
    1. 5.1. Solaris中登陆时的用户身份认证
    2. 5.2. 用户密码的有效期
    3. 5.3. 总结
    4. 5.4. 修改默认的shell
  6. 6. 网络管理
    1. 6.1. 各个命令的说明
      1. 6.1.1. Solaris
      2. 6.1.2. Linux
    2. 6.2. 各个命令的比较
      1. 6.2.1. 创建网卡接口和设置IP地址
      2. 6.2.2. 显示IP地址
      3. 6.2.3. Solaris中配置网络的过程
      4. 6.2.4. Solaris下网卡绑定 - IPMP
    3. 6.3. 总结
  7. 7. 后台服务管理
    1. 7.1. RHEL6
    2. 7.2. RHEL7
    3. 7.3. Solaris
    4. 7.4. 总结
  8. 8. 文件系统和存储
    1. 8.1. Linux的卷管理 - LVM
    2. 8.2. Solaris的卷管理 - ZFS
      1. 8.2.1. ZFS的快照(Snapshot)功能
      2. 8.2.2. ZFS命令
    3. 8.3. 总结
    4. 8.4. 补充1 - Solaris的卷标和设备路径
    5. 8.5. 补充2 - 磁盘分区
    6. 8.6. 补充3 - 挂载ISO文件
    7. 8.7. 补充4 - Solaris的文件系统构成
  9. 9. 系统监视
    1. 9.1. 日志文件
    2. 9.2. 系统监视命令
  10. 10. 虚拟化
    1. 10.1. Linux下的虚拟化技术
      1. 10.1.1. Docker
      2. 10.1.2. KVM
    2. 10.2. Solaris下的虚拟化技术
      1. 10.2.1. Solaris Zone
      2. 10.2.2. Oracle VM Server for SPARC
    3. 10.3. 比较一下
      1. 10.3.1. Docker和Solaris Zone
      2. 10.3.2. KVM和Oracle VM Server for SPARC
    4. 10.4. 虚拟环境下的命令
      1. 10.4.1. Docker:创建容器,删除容器
      2. 10.4.2. Solaris Zone: 创建zone,删除zone
      3. 10.4.3. KVM:创建客户机操作系统,关闭客户机
      4. 10.4.4. Oracle VM Server for SPARC: DomU的创建和关闭
  11. 11. 参考文档