smartos教程二:与 Linux 不同点总结

在SmartOS用户中最常见的问题之一就是,既然说SmartOS和Linux类似,那除了那些看不见的技术细节,在使用时到底有什么不同呢?如果已经熟练操作Linux,那SmartOS能快速上手么?答案是当然能,其实常用的不同之处并不多。这篇文章将回答Linux与SmartOS在操作上的不同之处。

在SmartOS用户中最常见的问题之一就是,既然说SmartOS和Linux类似,那除了那些看不见的技术细节,在使用时到底有什么不同呢?如果已经熟练操作Linux,那SmartOS能快速上手么?答案是当然能,其实常用的不同之处并不多。这篇文章将回答Linux与SmartOS在操作上的不同之处。

SmartMachine和其他类Unix系统不同之处主要在于两类:

  • 命令类似,但在SmartOS中用不同的名字
  • 完成类似的任务,但在SmartOS中有不同的实现过程

这里列出一个命令列表,用来帮助Linux用户找到在SmartOS中与Linux对等的命令。

  • Linux 和 SmartOS 命令对比列表
  • 不同使用语境(Use Context)的例子
    • 检查进程和内存
    • 启动和停止服务

Linux and SmartOS 命令对比列表

任务 / 操作系统LinuxSmartOSSmartOS Virtual Instance (zone)
表中缩写代表的含义
table key
(rh) = Red Hat, Mandrake, SUSE,...
(deb) = Debian, Libranet,...
(fed) = Fedora
(gen) = Gentoo
(md) = Mandrake/Mandriva
(SUSE) = SUSE
Joyent SmartOS

开源版本可访问以下链接http://smartos.org
Joyent SmartOS zone
管理用户
managing users
useradd
usermod
userdel
adduser
chage
getent
useradd
userdel
usermod
getent
logins
groupadd
useradd
userdel
usermod
getent
logins
groupadd
列举硬件配置信息
list hardware configuration
arch
uname
dmesg (if you're lucky)
cat /var/log/dmesg
/proc/*
lshw
dmidecode
lspci
lspnp
lsscsi
lsusb
lsmod
(SUSE) hwinfo
/sys/devices/*
arch
prtconf [-v]
prtpicl [-v]
uname
psrinfo [-v]
isainfo [-v]
dmesg
iostat -En
cfgadm -l
/etc/path_to_inst
arch
uname
psrinfo [-v]
isainfo [-v]
dmesg
iostat -En
读取磁盘命名
read a disk label
fdisk -lfdisk
prtvtoc
命名磁盘
label a disk
cfdisk
fdisk
e2label
format
prtvtoc
fdisk
磁盘分区
partition a disk
parted (if you have it)
cfdisk
fdisk
pdisk (on a Mac)
(deb) mac-fdisk (on a Mac)_
(md) _diskdrake
format
fmthard
rmformat
内核文件
kernel
/boot/vmlinuz*
/boot/bootlx
(see /etc/lilo.conf or /boot/grub/menu.lst)
/kernel/genunix
/platform/`uname -m`/
kernel/unix
kernel modules are in /kernel, /usr/kernel, and /platform/`uname -m`/kernel
Kernel module files not visible within a zone
显示/配置内核参数
show/set kernel parameters
/proc/*
/proc/sys/*
sysctl
/etc/sysctl.conf
sysdef
getconf
cat /etc/system
ndd
mdb -k[w]
sysdef
getconf
ndd
显示已加载的内核模块
loaded kernel modules
lsmodmodinfomodinfo
加载内核模块
load module
modprobe
insmod
modload
add_drv
devfsadm
卸载内核模块
unload module
rmmod
modprobe -r
modunload
启动脚本
startup scripts
/etc/rc* (but may vary)
/etc/init.d/
SMF(5)
/etc/rc*
/etc/init.d/
svcadm
svcs
SMF(5)
/etc/rc*
/etc/init.d
svcadm
svcs
启动/停止/配置服务
start/ stop/ config services
(rh) _service
(rh) _chkconfig
(deb) _sysv-rc-conf
svcs
svcadm
svccfg
svcs
svcadm
svccfg
关机
shutdown (& power off if possible)
shutdown -Ph now
shutdown -y -g0 -i0
halt
poweroff
shutdown -y -g0 -i5
halt
shutdown -y -g0 -i5
halt
run levels
*=normal states
更多细节参考
www.phildev.net/runlevels.html
(set in /etc/inittab)
0: halt
s,S,1: vendor-dependent
1: single-user
2-5*: multiuser
6: reboot
0: firmware monitor
s,S: single-user
1: sys admin
2: multiuser
3*: share NFS
4*: user-defined
5: power-down if possible
6: reboot
s,S: single-user
1: sys admin
2: multiuser
3*: share NFS
4*: user-defined
5: power-down if possible
6: reboot
show runlevel/sbin/runlevelwho -rwho -r
时区信息
time zone info
/usr/share/zoneinfo/
/etc/localtime
/usr/share/lib/zoneinfo//usr/share/lib/zoneinfo
检查交换分区
check swap space
swapon -s
cat /proc/meminfo
cat /proc/swaps
free
swap -s[h]
swap -l[h]
Note: in a zone, swap is virtual
memory size
swap -s[h]
swap -l[h]
bind process to CPUtaskset (sched-utils)pbind
psrset
pbind
psrset
终止进程
killing processes
kill
killall
kill
pkill
killall <- tries to kill everything, DO NOT USE THIS
kill
pkill
killall <- tries to kill everything, DO NOT USE THIS
显示CPU信息
show CPU info
cat /proc/cpuinfo
lscpu
psrinfo -pvpsrinfo -pv
内存信息
memory
freememprtconf | head
zonememstat
prtconf | head
zonememstat
默认文件系统
"normal" filesystem
ext2
ext3
ReiserFS
zfszfs
开机自动挂载分区配置
file system
description
/etc/fstab/etc/vfstab/etc/vfstab
创建文件系统
create filesystem
mke2fs
mkreiserfs
mkdosfs
mkfs
zfs
zpool
zfs (if zone has delegated dataset)
文件系统调试和恢复
file system debugging and recovery
fsck
debugfs
e2undel
zdb
创建非空文件
create non-0-length empty file
dd if=/dev/zero of=filename
bs=1024k count=desired
mkfilemkfile
创建/挂载ISO镜像
create/mount ISO image
mkisofs
mount -o loop pathToIso
mountPoint
mkisofs;DEVICE=`lofiadm -a /absolute_pathname/image.iso` ; mount -F hsfs -o ro
$DEVICE
ACL配置
ACL management
getfacl
setfacl
getfacl
setfacl
getfacl
setfacl
NFS share definitions/etc/exports/etc/dfs/dfstab
dfshares
NFS share command/etc/init.d/nfs-server reload_(rh)__ _exportfs -ashare
shareall
NFS informationcat /proc/mountsshowmount
nfsstat
nfsstat
name resolution order/etc/nsswitch.conf
/etc/resolv.conf
/etc/nsswitch.conf
getent
/etc/nsswitch.conf
getent
显示网络接口信息
show network interface info
ifconfig
ethtool
dladm
ndd
ifconfig -a
netstat -in
dladm
ndd
ifconfig -a
netstat -in
更改IP地址
change IP
Joyent Public Cloud IP addresses are set in the Cloud Management Portal.
ifconfig
ping one packetping -c 1 hostnameping hostname packetsize 1ping hostname packetsize 1
监听网络
sniff network
etherfind
tcpdump
wireshark (formerly _ethereal)
etherape
snoopsnoop
tcpdump available from pkgin
route definitionsroute
(rh) /etc/sysconfig/network
(rh) /etc/sysconfig/static-routes
(deb) /etc/init.d/network
(deb) /etc/network
/etc/defaultrouter
/etc/notrouter
/etc/gateways
in.routed
netstat -r
route add
/etc/defaultrouter
/etc/notrouter
/etc/gateways
in.routed
netstat -r
route add
telnetd, ftpd banner/etc/issue.net (telnet)
(ftp varies; can use tcp wrappers)
Use nc insteadUse nc instead
配置日期/时间
set date/time
(from net: ntp or other)
ntpdate
rdate
netdate
ntpdate
rdate
ntpdate
rdate
auditingauditd
/var/log/faillog
audit
auditd
auditreduce
praudit
audit
auditd
auditreduce
praudit
用户密码保存位置
encrypted passwords in
/etc/shadow (may vary)/etc/shadow/etc/shadow
最小密码长度
min password length
/etc/pam.d/system-auth/etc/default/passwd/etc/default/passwd
允许/禁止root登陆
allow/deny root
logins
/etc/securetty/etc/default/login/etc/default/login
防火墙配置
firewall config
iptables
ipchains
ipfwadm
(rh) redhat-config-
securitylevel
/etc/ipf/ipf.conf/etc/ipf/ipf.conf
显示已安装的软件
show installed software
(rh) _rpm -a -i
(rh) _rpm -qa
(rh) yum list installed
(deb) dselect
(deb) aptitude
(deb) dpkg -l
(gen) _ls /var/db/pkg/*
(gen) _eix -I
pkgin list
pkgin avail <- list available installable software
安装软件
add software
(rh) _rpm -hiv
(rh) yum install pkg
(deb) dselect
(deb) _apt-get install _pkg
(deb) dpkg -i
pkgin install
precompiled binaries* of GPLware and freeware*www.linux.org
linux.tucows.com
sourceforge.net
rpmfind.net
(deb) ftp.debian.org
(deb) packages.debian.org
(gen) packages.gentoo.org
(gen) gentoo-portage.com;
(md) easyurpmi.zarb.org
www.sunfreeware.com
www.blastwave.org
http://pkgsrc.joyent.com/
pkgin
C编译器
C compiler
cc
gcc
gcc
[https://download.joyent.com/pub/build/SunStudio.tar.bz2]
gcc (may need to be installed via pkgin)
https://download.joyent.com/pub/build/SunStudio.tar.bz2
configure/show
runtime linking
ldconfig
ldd
readelf
lsmod
crle
ldd
elfdump
dump
pldd
modinfo
LD_PRELOAD
crle
ldd
elfdump
dump
readelf
pldd
modinfo
LD_PRELOAD
链接库路径
link library path
$LD_LIBRARY_PATH
/etc/ld.so.conf
$LD_LIBRARY_PATH$LD_LIBRARY_PATH
跟踪工具
tracing utility
strace
ltrace
dtrace
truss
sotruss
dtrace
truss
sotruss
define user defaults/etc/profile
/etc/security/
/etc/skel/
/etc/profile.d/*
/etc/default/login
/etc/profile
/etc/security/
/etc/default/login
/etc/profile
/etc/security/
csh global .login/etc/csh.login/etc/.login/etc/.login
default syslog and messages/var/log/syslog
/var/log/messages
/usr/adm/messages
/var/log/maillog
/var/adm/messages
/var/log/syslog
softpanorama.org/Logs/solaris_logs.shtml
/var/adm/messages
/var/log/syslog
系统错误报告工具
system error reporting tool
dmesg_(deb)_ reportbugfmadm
fmdump
prtdiag
fmadm
fmdump
性能检测
performance monitoring
vmstat
procinfo -D
top
htop
pstree
dtrace
prstat
sar
ostat
kstat
mpstat
netstat
nfsstat
vmstat
lockstat
plockstat
ptree
vfsstat
intrstat
dtrace
prstat
sar
ostat
kstat
mpstat
netstat
nfsstat
vmstat
plockstat
ptree
vfsstat
查看进程占用的文件和端口match process to file or portlsof
netstat -atup
fuser
pfiles
pfiles
fuser
lsof
zones/containerszoneadm
zonecfg
zlogin
zoneadm
zonename
虚拟工具
Virtualization
kvm/qemukvm/qemu (each instance in a kvm branded zone)
vmadm
imgadm
WikipediaLinuxSmartOS
Illumos
SmartOS
Illumos

smartos 和linux相同命令不同作用的例子

下面的例子是一些常用的命令,他们在linux与smartos中的作用不同

CommandWhat's different on a Smart Machine
dfOn most SmartOS image this is set up to use the GNU version. Use /usr/bin/df for the native version.
lsofSmartMachines use a different collection of tools to examine processes. See [Examining processes and memory|#procmem||||||||||||\||] later in this topic.
pingReturns whether a host responds or not.
Use ping -s to get a continuous response.
toptop is available in /opt/local/bin, but prstat -Z provides more zone aware (and more accurate) information than top.

Rosetta Stone for Unix 是一个有用的资源,可以帮你看看你经常使用的UNIX版本和其他的UNIX版本(包括Mac)有何不同,并如何对应。

检查进程和内存

在旧的SmartOS镜像中,这些命令提供了端口和相关资源的信息,使用root或sudo可运行它们。新的镜像使用的是 SmartMachine 工具包(Tools Package)

CommandDescriptionExample
pcpDisplays the ports used by a process, or the processes that use a port./root/bin/pcp -p 80 displays all the processes that use port 80.
/root/bin/pcp -P 28068 displays all the ports that process 28068 uses.
/root/bin/pcp -a displays port and process information for all ports.
jinfDisplays information about how your SmartMachine is using its resources./root/bin/jinf -c displays CPU usage information.
/root/bin/jinf -m displays memory usage information.
/root/bin/jinf -s displays swap usage information.

SmartOS 提供了一个工具套件来检查进程,可以在 proc 的 man page 中学习到更多内容。

ToolDescription
prstatThis tool displays the active processes like top does on Linux systems.
prstat -Z will provide you with a summary of your SmartMachine's status.
pgrepReturns a list of process IDs (PIDs) of processes that match a pattern or meet certain conditions.
pkillKills the processes that match a pattern or meet certain conditions.
pfilesReturns a list of all the open files that belong to a process.
pstackDisplays a stack trace of the specified process
ptreeDisplays a process tree for all processes or a given process
ls /procLists the process IDs of all running processes.

你可以将 pgrep 的结果和其他 proc 工具合并显示。比如,显示与 http 进程相关的所有文件,可以使用如下命令来替代 lsof:

$ sudo pfiles $(pgrep http)

若要限制 prstat 显示 http 进程,可以使用命令:

$ prstat $(pgrep -d , http)

注意:如果 prstat 显示改变了你的终端设置,可以使用 reset 命令返回到正常状态

对于 vmstat, mpstat 和 psrinfo 命令,主要显示物理机中处理器和内存的统计信息。这些输出一般来说对于SmartMachine的管理员才有用。

启动和停止服务

在其他系统中,你也许习惯使用命令在 /etc/init.d 来启动或停止服务。
SmartMachines 使用 Service Management Facility 来做到这些。

命令 svcs 和 svcadm 是你经常会使用到的。有些命令把 service identifier 叫做FMRI(Fault Management Resource Identifier)。
你可以使用 svcs 命令列举一个服务所有的 identifier 。

CommandDescription
svcsLists all the enabled services
svcs -aLists all of the services, even those that are disabled or off line
svcadm enable apacheEnable all of the processes with an apache FMRI
svcadm disable apacheDisable all of the processes with an apache FMRI
svcadm restart apacheRestart all of the processes with an apache FMRI

例如,如果你想更改 /etc/ssh/sshd_config 后重启SSH,可以这样做:

$ sudo svcadm restart ssh

向了解更多关于SMF的信息,可以打开这个网页

smartos教程一:smartos入门

SmartOS是一个开源的Unix系列操作系统,从Solaris10分支出来,由Joyent公司开发。SmartOS拥有非常强大而简便的虚拟化功能,非常适合用来做云计算。

概述

Smartos是一个开源的Unix系列操作系统,从Solaris10分支出来,由Joyent公司开发。Smartos拥有非常强大而简便的虚拟化功能,非常适合用来做云计算。

Smartos详细资料请参考:https://wiki.smartos.org/display/DOC/Home

SmartOS入门

为了方便理解接下来的安装配置过程,先介绍一些Smartos相关的入门知识。

SmartOS是驻内存的操作系统,它本身不在磁盘上保存任何操作系统运行相关的文件,只将配置、虚拟机等信息持久化到磁盘上。所以每次启动时,整个系统都会被全部加载到内存中运行。而根据加载源的不同,就有两种加载方式:

  1. USB启动。将操作系统写入到U盘中,并让服务器从本地U盘启动。
  2. PXE启动。将操作系统放到某个服务器中并提供PXE启动服务,其他的服务器就可以通过网络启动了。

因此,操作系统更新时,也从来不用打任何补丁,直接从最新版的系统重新启动即可。

zfs文件系统

SmartOS使用zfs作为本地的文件系统,而zfs本身并不是SmartOS独有的,其他Linux发行版也可以使用。zfs和其他的文件系统相比有诸多好处,这里就不一一陈述了,但是简单的介绍下zfs的结构。

存储池

zfs首先从物理磁盘开始构建存储池,叫做zpool,服务器的存储空间可以由一个或者多个zpool组成,每个zpool都是独立的存储空间。

zpool

disk:操作系统可以直接检测到物理磁盘,也可以检测到硬件raid虚拟化出来的磁盘,但是为了充分利用zfs的性能,应该将硬件raid设置成直连(HBA)模式,直接暴露所有物理磁盘。

array:将物理磁盘进行任意组合,可以生成一个或多个软件阵列,可以是mirrorraid等模式。一旦阵列生成,组成阵列的磁盘数量将不允许变更,只能对成员磁盘进行脱离、更换等工作。

zpool:将阵列进行任意的组合,可以生成一个或者多个zpoolzpool可以添加或者删除子阵列,zpool的存储空间就是所有阵列存储空间的叠加。

文件系统

有了zpool存储空间后,就可以构建文件系统了。

zpool

zfs文件系统以zpool为根,以树形结构进行层级划分和管理,但是文件系统的属性(比如预留空间、权限、配额)可以有继承和依赖关系。zfs文件系统和虚拟机里面的文件系统很像似,但是不一样,zfs文件系统的节点是一个设备,需要挂载到虚拟机文件系统的一个目录树节点上,而虚拟机文件系统中的节点就是目录或者文件。最简洁的判别方法就是zfs文件系统不以/开头。

SmartOS网络层次

Smartos作为虚拟化操作系统,必然要实现网络硬件的虚拟化,虚拟化的技术叫做Crossbow,这里只简单的介绍一下。smartos网络层次

physical nic:一台物理机上可以插多张物理网卡,每个网卡上可以有多个物理网口,每个物理网口都有一个全宇宙唯一的mac地址。

aggregation:聚合网口由多个物理网口聚合而成,一个物理网口只能加入一个聚合网口或者不聚合,聚合网口通过一个名称来进行标识,物理网口直接用mac进行标识。

virtual switch:虚拟交换机的名称在Smartos里叫做nic tag,每个虚拟交换机能且只能配置一个聚合网口或者物理网口,一个聚合网口或者物理网口可以属于任意多个虚拟交换机。

global zonevm:global zone就是物理机的根操作系统,但是应该理解成一个特殊的虚拟机。虚拟机通过给每个虚拟网卡指定nic tag来接入虚拟交换机,每台虚拟机都必须指定一个主要网卡作为默认路由。

硬件需求

Smartos对硬件有些需求,并不适用任意硬件,不过也没有太多苛刻的地方,这里简单概括下:

1.64-bit x86架构,推荐Intel的CPU,开启VT-x功能支持kvm虚拟化。

2.能够USB启动以及能够PXE启动,第一台机器只可能USB启动,之后的机器可以PXE启动。

3.只支持本地存储,尽量避免使用硬件RAID,将RAID控制器设置成HBA直连模式。因为要使用zfs文件系统。

4.推荐Intel的网卡,至少两块网卡。

fedora 26 于7月13日正式发布

包括Workstation、Server和Atomic Host版本在内,Fedora 26系统镜像已经正式发布上线。用户可以通过命令行或者GNOME Software非常方面的进行升级,整个升级过程大约需要半个小时。继续为程序员和终端用户提供优质服务,Fedora于今天推出了全新升级的开发者软件,其中包括GCC 7,Golang 1.8和Python 3.6等等。

Fedora 26

包括Workstation、Server和Atomic Host版本在内,Fedora 26系统镜像已经正式发布上线。用户可以通过命令行或者GNOME Software非常方面的进行升级,整个升级过程大约需要半个小时。继续为程序员和终端用户提供优质服务,Fedora于今天推出了全新升级的开发者软件,其中包括GCC 7,Golang 1.8和Python 3.6等等。

此外在Fedora安装器中引入了全新的分区工具Anaconda,能够赋予系统爱好者和系统管理员更精细的控制选项。此外在本次升级中对Fedora 26的后台性能进行了诸多优化,例如更好的缓存用户和群组信息,更好的处理调试信息等等。此外在2.5重大版本更新中DNF安装包管理器也新增了很多功能。

下载地址:

Stack Clash提权漏洞曝光

2017年6月19日Unix操作系统(包括Linux、OpenBSD和FreeBSD)爆出存在提权漏洞,该漏洞让攻击者可以通过执行代码提权到root权限。这个问题最早由安全供应商Qualys发现,并根据该漏洞需要和其他的内存区的堆栈进行“碰撞冲突”特性,将其命名为“Stack Clash”(堆栈冲突)。

StackClash

2017年6月19日Unix操作系统(包括Linux、OpenBSD和FreeBSD)爆出存在提权漏洞,该漏洞让攻击者可以通过执行代码提权到root权限。这个问题最早由安全供应商Qualys发现,并根据该漏洞需要和其他的内存区的堆栈进行“碰撞冲突”特性,将其命名为“Stack Clash”(堆栈冲突)。

具体详情如下:

漏洞编号:CVE-2017-1000364

CVE-2017-1000366

漏洞名称:Linux Kernel Stack Clash安全漏洞

官方评级:高危

漏洞描述:该漏洞是由于操作系统内存管理中的一个堆栈冲突漏洞,它影响的Linux,FreeBSD,OpenBSD,NetBSD的,Solaris和I386和AMD64,攻击者可以利用它破坏内存并执行任意代码。

漏洞利用条件和方式:可以直接远程利用

受到影响的 Linux 发行版

  • Red Hat Enterprise Linux Server 5.x
  • Red Hat Enterprise Linux Server 6.x
  • Red Hat Enterprise Linux Server 7.x
  • CentOS Linux Server 5.x
  • CentOS Linux Server 6.x
  • CentOS Linux Server 7.x
  • Oracle Enterprise Linux Server 5.x
  • Oracle Enterprise Linux Server 6.x
  • Oracle Enterprise Linux Server 7.x
  • Ubuntu 17.10
  • Ubuntu 17.04
  • Ubuntu 16.10
  • Ubuntu 16.04 LTS
  • Ubuntu 12.04 ESM (Precise Pangolin)
  • Debian 9 stretch
  • Debian 8 jessie
  • Debian 7 wheezy
  • Debian unstable
  • SUSE Linux Enterprise Desktop 12 SP2
  • SUSE Linux Enterprise High Availability 12 SP2
  • SUSE Linux Enterprise Live Patching 12
  • SUSE Linux Enterprise Module for Public Cloud 12
  • SUSE Linux Enterprise Build System Kit 12 SP2
  • SUSE Openstack Cloud Magnum Orchestration 7
  • SUSE Linux Enterprise Server 11 SP3-LTSS
  • SUSE Linux Enterprise Server 11 SP4
  • SUSE Linux Enterprise Server 12 SP1-LTSS
  • SUSE Linux Enterprise Server 12 SP2
  • SUSE Linux Enterprise Server for Raspberry Pi 12 SP2

包括Red Hat、Debian、Ubuntu和SUSE等很多Linux发行机构已经修复了这个漏洞。更多更详细信息可以访问:

SUSE
https://www.novell.com/support/kb/doc.php?id=7020973
Red Hat
https://access.redhat.com/security/vulnerabilities/stackguard
Debian
https://www.debian.org/security/2017/dsa-3886
https://www.debian.org/security/2017/dsa-3887
https://www.debian.org/security/2017/dsa-3888
https://www.debian.org/security/2017/dsa-3889
Ubuntu
https://www.ubuntu.com/usn/
OpenBSD
https://ftp.openbsd.org/pub/OpenBSD/patches/6.1/common/008_exec_subr.patch.sig
Oracle Solaris
http://www.oracle.com/technetwork/security-advisory/alert-cve-2017-3629-3757403.html

Docker 国内Mirror镜像推荐

Docker Registry Mirror的原理类似于缓存,如果镜像在Mirror中命中则直接返回给客户端,否则从存放镜像的Registry上拉取并自动缓存在Mirror中。最酷的是,是否使用Mirror对Docker使用者来讲是透明的,也就是说在配置Mirror以后,大家可以仍然输入docker pull ubuntu来拉取Docker Hub镜像,除了速度变快了,和以前没有任何区别。

前言

Docker Registry Mirror的原理类似于缓存,如果镜像在Mirror中命中则直接返回给客户端,否则从存放镜像的Registry上拉取并自动缓存在Mirror中。最酷的是,是否使用Mirror对Docker使用者来讲是透明的,也就是说在配置Mirror以后,大家可以仍然输入docker pull ubuntu来拉取Docker Hub镜像,除了速度变快了,和以前没有任何区别。

了以更便捷的方式对接Docker Hub生态圈,使用Registry Mirror自然成为我的首选。接下来我就和大家一起看看国内有哪些 Mirror镜像。

1、Docker 官方镜像加速

这是Docker官方的中国区镜像加速,该镜像托管于中国大陆,速度有保证。使用方法详见:Docker 官方镜像加速

2、ustc 镜像加速

ustc是老牌的linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在用。使用方法详见:Docker 镜像使用帮助

3、网易蜂巢镜像加速

目前网易镜像已经比较稳定。使用方法详见:DockerHub镜像加速

直播协议hls介绍

HTTP Live Streaming(缩写是HLS)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。是苹果公司QuickTime X和iPhone软件系统的一部分。它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的extended M3U (m3u8)playlist文件,用于寻找可用的媒体流。

hls 是什么?

我觉得以直播来说,hls 是一个相当好懂的协定,其实就是透过一个 .m3u8 的播放列表,然后里面有多个 .ts 的档案
你只要照着播放列表里面给你的档案顺序播放就好了,听起来很容易吧!

为了让大家更明白,直接附上摘取自某处的播放列表:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:YES
#EXT-X-MEDIA-SEQUENCE:4454
#EXT-X-TARGETDURATION:4
#EXTINF:3.998, no desc
25133_src/4460.ts
#EXTINF:3.992, no desc
25133_src/4461.ts
#EXTINF:3.985, no desc
25133_src/4462.ts
#EXTINF:3.979, no desc
25133_src/4463.ts
#EXTINF:3.996, no desc
25133_src/4464.ts</pre>

就算你没看过这个格式,你大概看一下也可以猜出来它在做什么每一个 ts 就是一个片段,然后 #EXTINF:3.996 代表这个片段的时间长度#EXT-X-TARGETDURATION:4,这边的数字必须比播放清单中的任何一个影片的时间都大代表播放器应该每隔几秒去抓一次新的播放清单

例如说,下一次抓到的可能会长这样:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:YES
#EXT-X-MEDIA-SEQUENCE:4455
#EXT-X-TARGETDURATION:4
#EXTINF:3.992, no desc
25133_src/4461.ts
#EXTINF:3.985, no desc
25133_src/4462.ts
#EXTINF:3.979, no desc
25133_src/4463.ts
#EXTINF:3.996, no desc
25133_src/4464.ts
#EXTINF:3.998, no desc
25133_src/4465.ts

就是最后面多了一个片段。所以只要一直维持这个规则,就能够不断取到新的片段。那如果很不巧的,server 没有及时产生出播放列表怎么办呢?

例如说在第 4 秒的时候去拿,发现没更新,server 在第 4.5 秒才把新的播放片段产生出来。如果发生这种「拿了播放清单,但长的一样」的情形,就会把抓取的时间减一半,直到抓到为止。像以上情形,第 4 秒没拿到新的,就会隔 2 秒之后再去抓。

这个规则可以参考:HTTP Live Streaming draft-pantos-http-live-streaming-20

When a client loads a Playlist file for the first time or reloads a Playlist file and finds that it has changed since the last time it was loaded, the client MUST wait for at least the target duration before attempting to reload the Playlist file again, measured from the last time the client began loading the Playlist file.
If the client reloads a Playlist file and finds that it has not changed then it MUST wait for a period of one-half the target duration before retrying.

至于做直播最关心的延迟问题,也可以直接从这个播放列表直接推测出来。以上面的例子来说,一共有 5 个片段,每一个片段 4 秒,延迟就是 20 秒。Apple 官方建议的是 3 个片段,每个片段 10 秒。

What duration should media files be? A duration of 10 seconds of media per file seems to strike a reasonable balance for most broadcast content.

How many files should be listed in the index file during a continuous, ongoing session? The normal recommendation is 3, but the optimum number may be larger.

可参考:Apple: HTTP Live Streaming Overview

不过依照官方的建议,就会有 30 秒的延迟,当然延迟越久直播的状况会越好,可是体验也会比较差一点。因此,我们可以来看看几个直播网站都是怎么设定的。

先来看看直播大头:Twitch

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:5
#ID3-EQUIV-TDTG:2016-11-26T02:40:23
#EXT-X-MEDIA-SEQUENCE:376
#EXT-X-TWITCH-ELAPSED-SYSTEM-SECS:1511.137
#EXT-X-TWITCH-ELAPSED-SECS:1508.980
#EXT-X-TWITCH-TOTAL-SECS:1535.137
#EXTINF:4.000,
index-0000000377-6zCW.ts
#EXTINF:4.000,
index-0000000378-vHZS.ts
#EXTINF:4.000,
index-0000000379-Gkgv.ts
#EXTINF:4.000,
index-0000000380-PNoG.ts
#EXTINF:4.000,
index-0000000381-h58g.ts
#EXTINF:4.000,
index-0000000382-W88t.ts

6 个片段 * 4 秒 = 24 秒。可是如果你仔细观察(开 chrome devtool 就可以了),实际上 twtich 的播放器在拿到列表以后会直接尝试从「倒数第三个」片段开始载入,所以延迟就缩短为 3*4 = 12 秒了。

再来看看台湾的 livehouse.in

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:NO
#EXT-X-MEDIA-SEQUENCE:2291
#EXT-X-TARGETDURATION:6

#EXTINF:5.2090001106262207,
1480116261segment_v02291.ts
#EXTINF:5.2080001831054688,
1480116261segment_v02292.ts
#EXTINF:5.2080001831054688,
1480116261segment_v02293.ts

5*3 = 15 秒

所以一般用 hls 的直播网站,延迟大概都会在 10~20 秒这个区间以内。我猜比这个短的话对 server 压力可能很大,而且网速慢的话,看起来会很卡。比这个长的话虽然很顺,但是使用者体验不太好,延迟太高,所以能找到最好的延迟就是在这个区间内了。

最后,我们来看看如果要在网页上播放的话,有哪些选择。因为现在已经是个 flash 快死掉的年代了,所以如果可以的话,首选当然是 html5,浏览器支援度不够高的话再 fallback 回去 flash。

先来介绍一下现成的商业授权播放器,例如说 jwplayer 或是 flowplayer,都是很不错的选项。尤其是当 open source 的方案出现问题你又修不好的时候,就会很希望公司花钱买一个商业播放器,一切问题都搞定。

open source 的方案大概就是 videojs 一支独秀了,有没有其他的后起之秀我是不知道啦,有的话麻烦推荐一下。

然后因为 hls 这个格式浏览器本身是没办法播放的,所以要搭配一些 plugin。videojs 官方有一个 videojs-contrib-hls,加上去之后就可以播放了,但我自己用过以后感觉不是很好。

最后选择了知名的影音网站 dailymotion 提供的开源解决方案 hls.js

树莓派与CoderDojo合并推进青少年的编程教育

树莓派(Raspberry Pi)今天宣布与Coder Dojo合并,打算做全球最大的促进编程组织,其目的是汇集资源和专业知识,推进青少年编程教育,让更多青少年可以得到编程培训服务。

 

树莓派

Raspberry Pi(树莓派)自问世以来,就受到众多计算机发烧友和创客的追捧,曾经是一“派”难求,其强大的功能也受到了广大DIY爱好者的青睐。不过,这款信用卡大小的卡片式电脑的初衷是为了学生计算机编程教育而设计,以提升学校计算机科学及相关学科的教育、让计算机变得有趣为宗旨。

Raspberry Pi基金会通常与教育合作伙伴合作,将其Raspberry Pi电脑提供给适合的组织。今天,Raspberry Pi基金会宣布与CoderDojo合并,形成全球最大的促进编程组织。

Code Club成立于2013年6月,俱乐部一直在智力与激发9-11岁的儿童对科技的兴趣。目前,英国已经建立了3250个Code Club俱乐部,有超过四万名儿童参与其中,在其他国家和地区还有1000家Code Club在进行儿童计算机教育。

Raspberry Pi基金会目前提供资源,以帮助支持教授编程的教育工作者,并且还运行儿童编程俱乐部网络,每星期为超过15万名儿童提供服务。Raspberry Pi基金会首席执行官Eben Upton最近表示,该组织将更多地关注软件,提升其慈善工作。今天的公告表明,梦想正在成为现实。Raspberry Pi将与CoderDojo密切合作,推动它们的共同目标,汇集资源和专业知识,让更多的成年志愿者和参与活动的年轻人为儿童少年提供编程培训服务。

利用微型计算机开展学生编程教育已经屡见不鲜,Arduino、Galileo等微型电脑开发板厂商也都尝试致力于计算机编程教育领域,今年10月份,BBC Micro:bit迷你计算机设备的生产公司向英国六年级的孩子们免费发放了100万台BBC Micro:bit设备,并且提供开源资料,这一切都是鼓励和支持儿童与年轻人学习编程技术。

在互联网时代,科技迅猛发展,编程似乎不再是专业人士运用的技能,而是成为了一门人人都需要了解的基础学科,Raspberry Pi和Code Club的融合就是为了促进更多人去学习和了解它。双方表示,在未来都会在网上提供免费的编程资源,Code Club的工作也会持续发展,在全球各地建立更多的教育俱乐部,让更多人受益。

WordPress后台框架OptionsFramework使用设置

Options Framework 是一款轻量级的主题后台设置框架, Options Framework 是国外一款非常流行的主题后台开发框架,因为其便捷性与开源免费,许多主题都是采用它作为 WordPress 主题后台。其分为主题版 Options Framework Theme 与插件版 Options Framework Plugin。Options Framework 支持几乎所有的表单(Form),安装与调用非常简单。在 options.php 定义你喜欢的选项,在后台就会自动地显示出来。

Options Framework 是一款轻量级的主题后台设置框架, Options Framework 是国外一款非常流行的主题后台开发框架,因为其便捷性与开源免费,许多主题都是采用它作为 WordPress 主题后台。其分为主题版 Options Framework Theme 与插件版 Options Framework Plugin。Options Framework 支持几乎所有的表单(Form),安装与调用非常简单。在 options.php 定义你喜欢的选项,在后台就会自动地显示出来。

OptionsFramework新特性

  • 轻量级
  • 基于wordpress原生api实现,提供了比较全面的常用选项
  • 界面与wordpress统一,当然也可以自己定制
  • 功能强大,使用简单

Options Framework其实是一款主题,安装启用,就可以看到效果了,这时候会在后台→外观菜单下面多出来一个“Theme Options”的菜单(如果需要在左侧主菜单中显示该选项,可通过add_menu_page()实现),打开后即可看到所有的设置选项,下图已经修改为“主题选项”了如下图:

Wordpress Options Framework

 

框架使用方法

  1. 复制Options Framework主题文件夹下的inc、images文件夹和options.php,放到你的主题根目录下面
  2. 然后在你的主题的funtions.php加入以下代码(该代码在主题版的funtions.php开头):
if (!function_exists('optionsframework_init')){
    define('OPTIONS_FRAMEWORK_DIRECTORY', get_template_directory_uri().'/inc/');
    require_once dirname(__FILE__).'/inc/options-framework.php';
}

如果你需要在设置面板中加入javascript代码,在上面代码后面加入以下代码:


add_action('optionsframework_custom_scripts', 'optionsframework_custom_scripts');
    function optionsframework_custom_scripts(){ ?>
        <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%20type%3D%22text%2Fjavascript%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20your%20javascript%20code...%0A%20%20%20%20%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="&lt;script&gt;" title="&lt;script&gt;" />
<?php
}

如果你需要在设置面板后面加入自定义内容,需要在以上代码中加入以下代码:(第三页将说明如何在设置面板后面加入一个自定义面板)

add_action('optionsframework_after','options_after', 100);
function options_after() { ?>
    your html code...
<?php
}

Options Framework产生的后台选项支持功能

后台页面是选项卡式的,非常美观大方,支持的功能也很多,包括:

  • 表单按钮(text、checkbox、radio、select)
  •  图片上传
  • 背景图片和背景色
  • 字体选择
  •  图片选择(例如用来选择主题的layout)
  • 帮助信息
  • 复位按钮

自定义选项

打开options.php中,模仿以下代码能做出自己的选项。

<?php /* options.php line 60 */ //初始化存储选项的$options数组 $options = array(); //定义一个选项卡,标题是Basic Settings,注意type是heading $options[] = array("name" => "Basic Settings",
    "type" => "heading");
    //定义一个text类型的input box,type要设置为text,class为mini会让input长度比较短
    $options[] = array("name" => "Input Text Mini",
    "desc" => "A mini text input field.",
    "id" => "example_text_mini",
    "std" => "Default",
    "class" => "mini",
    "type" => "text");
//同上,但没有设置class mini,input长度较长
$options[] = array("name" => "Input Text",
    "desc" => "A text input field.",
    "id" => "example_text",
    "std" => "Default Value",
    "type" => "text");
//输出一个textarea
$options[] = array("name" => "Textarea",
    "desc" => "Textarea description.",
    "id" => "example_textarea",
    "std" => "Default Text",
    "type" => "textarea");
//输出select下拉菜单,$test_array存储下拉菜单的选项,“std”表示默认选中的项
$options[] = array( "name" => "Input Select Small",
 "desc" => "Small Select Box.",
 "id" => "example_select",
 "std" => "three",
 "type" => "select",
 "class" => "mini", //mini, tiny, small
 "options" => $test_array);
//对应下面最后的代码
$options[] = array(
    'name' => __('Input Checkbox Name', 'options_framework_theme'),
    'desc' => __('Check to display.'),
    'id' => 'example_checkbox_2',
    'std' => '1',
    'type' => 'checkbox'
);

其中: name – 选项的label名称

id – 这个id很重要,区分每个选项,必须是唯一的,存储和获取选项时这个作为键使用

type – 不同type产生不同的选项

前台调用举例

前台调用的话可以看原来主题版的index.php 。这里给出一些示例:

<?php echo of_get_option('example_checkbox', 'no entry' ); ?>
 
 <?php if ( of_get_option('example_uploader') ) { ?>
            <img src="<?php echo of_get_option('example_uploader'); ?>" />
            <?php } ?>
 
<?php $multicheck = of_get_option('example_multicheck', 'none' ); ?>
            <?php print_r($multicheck); ?>
 
<?php if ( is_array($multicheck) ) { foreach ($multicheck as $key => $value) {
                    // If you need the option's name rather than the key you can get that
                    $name = $test_array_jr[$key];
                    // Prints out each of the values
                    echo '
<li>' . $key . ' (' . $name . ') = ' . $value . '</li>

';
                }
            }
            else {
                echo '
<li>There are no saved values yet.</li>

';
            }
            ?>

使用Options Framework详解

1.入门,Options Framework(下简称框架)的设置选项以如下形式出现:

$options[] = array(
        "name"    => '',  //选填,选项名称
        "desc"    => '',  //选填,选项说明
        "id"      => '',  //必填,对应表单元素ID,该项作为唯一标识,不可与其他选项重复!
        "std"     => '',  //可选,元素默认值
        "class"   => '',  //可选,该类型元素class
        "type"    => '',  //可选,表单元素类型
        "settings"=> ''   //可选,仅当调用编辑器时使用
    );

比如:

$options[] = array(
        "name"=>'网站公告:',
        "desc"=>'输入您的网站公告,不要超过50个字符。',
        "id"=>'site_notices',
        "std"=>'输入您的网站公告',
        "class"=>'mini',
        "type"=>"text"
    );

2.添加选项卡,在需要加入的地方加入如下代码:

$options[] = array(
		'name' => '新选项卡',
		'type' => 'heading'
    );

3.调用

通过以上两步,后台设置部分基本完成,那么主题如何调用这些设置值呢?框架自带的主题中明确说明了每一种类型的调用方法,可参考主题中的调用方法,简单来说通过of_get_option($id,$default)即可调用保存的值,其中$id为必选值,即为需要调用元素的id值,$default为可选值,表示当所调用的元素值不存在时显示的值,如:

<?php echo of_get_option('site_notices', '暂无公告信息!'); ?>

注意,of_get_option()只是返回了一个值,需要用echo输出才能在主题中显示,某些情况下,也可能需要使用如下代码:

<?php if(of_get_option("example_checkbox")){ echo "checkbox is checked"; }else{ echo "checkbox is not checked"; } ?>

通过以上两段代码,应该能较深刻的理解为什么要用echo输出。更详细的内容说明请转至文章底部,下载作者Options Framework中文版,查看更详细的调用方式。

4.修改输出方式,

如果想修改以上函数名,找到inc/options-framework.php中478和480两行,将“of_get_option”替换为需要的函数名称即可。如替换为get_opt,则可以通过get_opt($id,$default)调用。

5.主题本地化,

如果主题需要支持多种语言,则需要在所有文件中替换“options_framework_theme”为您的主题名称或您想要使用的名称。

OptionsFramework下载

自动调整网站内嵌Youtube视频大小

站长在制作网站的时候,常常会需要嵌入Youtube影片,现在移动设备盛行,有各种不同屏幕大小的移动设备来浏览网站,若在网站上要内嵌入Youtube视频,该如何让该影片可以根据浏览设备的屏幕大小自动调整影片嵌入大小呢?

在请Google一番之后,答案出乎意料的简单。以下是搜索出来的解决方案:

首先先把下列CSS网站的CSS文件里:

.video-container {
  position: relative;
  padding-bottom: 56.25%;
  padding-top: 30px;
  height: 0;
  overflow: hidden;
}

.video-container iframe,
.video-container object,
.video-container embed {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

接着把Youtube视频的iframe代码在div里面,并且把这个div的类设成video-container,以下为范例:

<div class="video-container">
  <iframe width="560" height="315" src="https://www.youtube.com/embed/2KmHtgtEZ1s" frameborder="0" allowfullscreen></iframe>
</div>

如此一来就内嵌的视频大小就会自动根据屏幕宽度调整了!

在Debian 8.8安装使用zfs文件系统

ZFS文件系统是一个革命性的新文件系统,从根本上改变了在类Unix操作系统上管理文件系统的方式。 ZFS提供了在今天可用的任何其他文件系统中找不到的功能和优点。 ZFS是强大的,可扩展的,易于管理。

引言

ZFS文件系统的英文名称为ZettabyteFileSystem,也叫动态文件系统(DynamicFileSystem),是第一个128位文件系统。最初是由Sun公司为Solaris10操作系统开发的文件系统。作为OpenSolaris开源计划的一部分,ZFS于2005年11月发布,被Sun称为是终极文件系统,经历了10年的活跃开发,而最新的开发将全面开放,并重新命名为OpenZFS。

ZFS优势

  1. ZFS是一种先进的、高度可扩展的文件系统,最初是由Sun Microsystems开发的,现在OpenZFS是项目的一部分。有这么多文件系统可用在Linux上,那自然要问ZFS有什么特别之处。不同于其它文件系统,它不仅是一个文件系统逻辑卷管理器。ZFS使其受欢迎的特性是:
  2.  数据完整性——数据一致性和完整性通过即写即拷和校验技术保证。
  3. 存储空间池——可用存储驱动器一起放入称为zpool的单个池。
  4. 软件RAID ——像发出一个命令一样,建立一个raidz数组。
  5. 内置的卷管理器——ZFS充当卷管理器。
  6. Snapshots、克隆、压缩——这些都是一些ZFS提供的高级功能。

安装ZFS

在这篇文章中,我们将学习在Debian 8.8上安装、设置和使用ZFS文件系统。

根据网站www.zfsonlinux.org的信息 ,ZFS仅支持AMD64和Intel 64位架构(amd64)。 让我们开始安装。

1、更新Debian系统

在Debian8中,zfs软件包已经加入debian backports源

首先我们需要在系统中启用backports源,并更新系统

echo "deb http://ftp.debian.org/debian jessie-backports main contrib" /etc/apt/sources.list.d/backports.list
aptitiude update
apititiude upgrade

2、安装zfs

安装kernel headers

aptitiude install linux-headers-$(uname -r)

安装 zfs-dkms

aptitiude install -t jessie-backports zfs-dkms

如果需要在在根分区使用zfs,你需要安装zfs-initramfs

aptitiude install -t jessie-backports zfs-initramfs

3、创建和配置池

服务器重新启动后,检查zfsonlinux是否安装并运行良好。


# dpkg -l | grep zfs
ii debian-zfs 7~jessie amd64 Native ZFS filesystem metapackage for Debian.
ii libzfs2 0.6.5.2-2 amd64 Native ZFS filesystem library for Linux
ii zfs-dkms 0.6.5.2-2 all Native ZFS filesystem kernel modules for Linux
ii zfsonlinux 6 all archive.zfsonlinux.org trust package
ii zfsutils 0.6.5.2-2 amd64 command-line tools to manage ZFS filesystems

上面的结果显示,linux上的zfs已经安装好了,所以我们可以继续创建第一个池。

我已经为这台服务器添加了五个磁盘,每个磁盘的大小为2GB。 我们可以使用以下命令检查可用磁盘:


# ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda5 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg

我们可以看到/ dev / sda直到/ dev / sdg , / dev / sda用于操作系统Debian Linux Jessie 8.1。 我们将使用/ dev / sdb直到/ dev / sdg为ZFS文件系统。

现在我们可以开始创建池,第一个我会告诉你如何创建一个raid0(条带)。


# zpool list
no pools available

# zpool create -f pool0 /dev/sdb
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
pool0 1.98G 64K 1.98G – 0% 0% 1.00x ONLINE –

命令“zpool list”表示我们成功创建了一个raid0 zfs池,池名为pool0 ,大小为2GB。

接下来我们将创建一个raid1(镜像)与其他磁盘。


# zpool create -f pool1 mirror /dev/sdc /dev/sdd
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
pool0 1.98G 64K 1.98G – 0% 0% 1.00x ONLINE –
pool1 1.98G 64K 1.98G – 0% 0% 1.00x ONLINE –

我们可以看到我们现在有两个池, pool0为raid0, pool1为raid1。

要检查池的状态,我们可以使用以下命令:


# zpool status
pool: pool0
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
pool0 ONLINE 0 0 0
sdb ONLINE 0 0 0
errors: No known data errors
pool: pool1
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
pool1 ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
errors: No known data errors

我们可以使用“zpool status”命令检查池状态。 我们可以看到pool0和pool1之间的区别,pool0只有一个磁盘,pool1有两个磁盘,磁盘状态为mirror(mirror-0)。

接下来,我们将使用RAID-Z创建一个池,RAID-Z是像RAID-5这样的数据/奇偶校验分配方案,但它使用动态条带宽度:每个块都具有自己的RAID条带,无论块大小如何,导致每个RAID-Z写入都是全条带写入。

RAID-Z需要至少三个硬盘驱动器,并且是RAID 0和RAID 1之间的妥协。在RAID-Z池中:如果池中的单个磁盘死机,则只需替换该磁盘,ZFS将自动重建数据基于来自其他磁盘的奇偶校验信息。 要松开存储池中的所有信息,两个磁盘将不得不死亡。 为了使驱动器设置更加冗余,您可以使用RAID 6(在ZFS情况下为RAID-Z2)获得双重奇偶校验。

我们先创建一个奇偶校验的RAID-Z池。


# zpool create -f poolz1 raidz sde sdf sdg
# zpool list poolz1
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
poolz1 5.94G 117K 5.94G – 0% 0% 1.00x ONLINE –

# zpool status poolz1
pool: poolz1
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
poolz1 ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
sde ONLINE 0 0 0
sdf ONLINE 0 0 0
sdg ONLINE 0 0 0
errors: No known data errors

# df -h /poolz1
Filesystem Size Used Avail Use% Mounted on
poolz1 3.9G 0 3.9G 0% /poolz1

我们可以看到,df -h显示我们的6GB池已经减少到4GB,2GB被用于保存奇偶校验信息。 使用zpool status命令,我们看到我们的池现在正在使用RAID-Z。

接下来我们将创建RAID-Z2(raid 6),为此,我们必须删除现有的池,因为没有更多的磁盘可用。 删除池很容易,我们可以使用zpool destroy命令。


# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
pool0 1.98G 64K 1.98G – 0% 0% 1.00x ONLINE –
pool1 1.98G 64K 1.98G – 0% 0% 1.00x ONLINE –
poolz1 5.94G 117K 5.94G – 0% 0% 1.00x ONLINE –

# zpool destroy pool0
# zpool destroy pool1
# zpool destroy poolz1
# zpool list
no pools available

现在我们所有的zpool都没有了,所以我们可以创建一个RAID-Z2池。


# zpool create poolz2 raidz2 sdb sdc sdd sde
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
poolz2 7.94G 135K 7.94G – 0% 0% 1.00x ONLINE –

# df -h /poolz2
Filesystem Size Used Avail Use% Mounted on
poolz2 3.9G 0 3.9G 0% /poolz2

# zpool status poolz2
pool: poolz2
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
poolz2 ONLINE 0 0 0
raidz2-0 ONLINE 0 0 0
sdb ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
sde ONLINE 0 0 0
errors: No known data errors

我们可以看到,df -h显示,我们的8GB池已经减少到4GB,因为4GB被用于持有奇偶校验信息两次。 使用“zpool status”命令,我们看到我们的池现在使用RAID-Z2。

4、创建和配置ZFS文件系统

在下一步中,我们将创建和配置ZFS文件系统。


# zfs list
NAME USED AVAIL REFER MOUNTPOINT
poolz2 105K 3.83G 26.1K /poolz2

我们已经有一个ZFS文件系统,当我们创建zpool时,这个文件系统会自动添加。 现在我们将创建另一个ZFS文件系统。


# zfs create poolz2/tank
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
poolz2 132K 3.83G 26.1K /poolz2
poolz2/tank 25.4K 3.83G 25.4K /poolz2/tank

# df -h | grep poolz2
poolz2 3.9G 128K 3.9G 1% /poolz2
poolz2/tank 3.9G 128K 3.9G 1% /poolz2/tank

我们创建一个名为tank的新的ZFS文件系统,并自动将其安装为/ poolz2 / tank 。

如何为ZFS文件系统创建自定义安装点? 使用以下命令:


# zfs create poolz2/data -o mountpoint=/data
# df -h | grep poolz2
poolz2 3.9G 0 3.9G 0% /poolz2
poolz2/tank 3.9G 0 3.9G 0% /poolz2/tank
poolz2/data 3.9G 0 3.9G 0% /data

如何修改现有的mountpoint? 我们可以通过以下命令来做到这一点:


# zfs set mountpoint=/tank poolz2/tank
# df -h | grep poolz2
poolz2 3.9G 0 3.9G 0% /poolz2
poolz2/data 3.9G 0 3.9G 0% /data
poolz2/tank 3.9G 0 3.9G 0% /tank

要安装和卸载文件系统,请使用以下命令:


# zfs unmount /data
# df -h | grep poolz2
poolz2 3.9G 0 3.9G 0% /poolz2
poolz2/tank 3.9G 0 3.9G 0% /tank

# zfs mount poolz2/data
# df -h | grep poolz2
poolz2 3.9G 0 3.9G 0% /poolz2
poolz2/tank 3.9G 0 3.9G 0% /tank
poolz2/data 3.9G 0 3.9G 0% /data

删除zfs文件系统非常容易,我们可以使用命令zfs destroy来进行。


# zfs destroy poolz2/data
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
poolz2 152K 3.83G 26.1K /poolz2
poolz2/tank 25.4K 3.83G 25.4K /tank

文件系统/数据已经没了。

结论

ZFS文件系统是一个革命性的新文件系统,从根本上改变了在类Unix操作系统上管理文件系统的方式。 ZFS提供了在今天可用的任何其他文件系统中找不到的功能和优点。 ZFS是强大的,可扩展的,易于管理。