基于DIY主机+CentOS搭建模块化NAS系统
NAS介绍
NAS(Network Attached Storage): 网络附属存储
按市场定位划分
企业级NAS
家用级NAS
家用级NAS功能
以群晖为例:
文件系统共享
文件同步
容器
虚拟机
下载
流媒体
备份
家用NAS解决方案
直接购买软硬件结合消费级产品
优点:时间成本,学习成本,云服务
缺点:性价比,性能
兼容的主机安装发行版NAS系统
优点:同时兼顾了可视化,学习成本和性价比
缺点:服务管理和系统管理
主流主机+最小化操作系统上搭建服务
优点:兼容性,系统管理和服务管理
缺点:学习成本,时间成本
自己在家设计芯片/文件系统/操作系统
优点:性能,创新
缺点:技术难度
DIY主机
机箱
塔式机箱
中塔
全塔
NAS机箱
MATX
ITX
微型电脑
树莓派等
CPU
服务器cpu
台式机cpu
嵌入式
大致考虑以下几点:
功耗
噪音
稳定性
性能
性价比
扩展性
操作系统
RHEL,CentOS,Ubuntu,SUSE,Fedora,Windows Server,Windows
最小化安装CentOS 8
过程略
LVM RAID
描述
lvm(8)RAID是一种创建逻辑卷(LV)的方法,它使用多个物理设备来提高性能或容忍设备故障。在LVM中,物理设备是单个卷组(VG)中的物理卷(PV)。
LV数据块如何放置在PV上取决于RAID级别。RAID级别通常称为“RAID”,后跟一个数字,例如raid1、raid5或raid6。选择RAID级别需要在以下方面进行权衡:物理设备要求、容错性和性能。有关RAID级别的说明,请访问www.snia.org/sites/default/files/SNIA_DDF_Technical_Position_v2.0.pdf
LVM RAID使用Linux内核中的设备映射器(DM)和多个设备(MD)驱动程序。DM用于创建和管理可见LVM设备,MD用于在物理设备上放置数据。
LVM在可见LV和物理设备之间创建分层的隐藏LV(dm设备)。中间层的LVS被称为子LVS。对于LVM raid,将为每个raid映像/分支创建一个子LV对来存储数据和元数据(raid超级块和写意图位图)(请参见下面的lvs命令示例)。
USAGE
要创建RAID LV,请使用lvcreate并指定LV类型. The LV type corresponds to a RAID level. 可以使用的基本RAID级别有: raid0, raid1, raid4, raid5, raid6,raid10.
lvcreate --type RaidLevel [OPTIONS] --name Name --size Size VG [PVs]
To display the LV type of an existing LV, run:
lvs -o name,segtype LV
(The LV type is also referred to as "segment type" or "segtype".)
LVs can be created with the following types:
raid0
也叫 striping, raid0 spreads LV data across multiple devices in units of stripe size. 这用于提高性能. 如果任何设备出现故障,LV数据将丢失.
lvcreate --type raid0 [--stripes Number --stripesize Size] VG [PVs]
--stripes Number
指定要在其上分布LV的设备数。
--stripesize Size
指定每个条带的大小(以KB为单位)。这是移动到下一个设备之前写入一个设备的数据量。
PVs指定要使用的设备。如果未指定,lvm将根据可用或提供的PV数量选择多个设备,每个条带一个。
raid1
也叫 mirroring, raid1 uses multiple devices to duplicate LV data. 如果除一个设备外的所有设备都出现故障,LV数据仍然可用. The minimum number of devices (i.e. subLV pairs) required is 2.
lvcreate --type raid1 [--mirrors Number] VG [PVs]
--mirrors Number
指定除原始LV映像之外的镜像映像数,例如--mirrors 1表示数据有两个映像,原始映像和一个镜像。
PVs指定要使用的设备。如果未指定,lvm将选择多个设备,每个镜像一个。
raid5
raid5是条带化的一种形式,它使用额外的设备来存储奇偶校验块。LV数据和奇偶校验块存储在每个设备上,出于性能原因,通常以旋转模式存储。如果一台设备出现故障,LV数据仍然可用。奇偶校验用于重新计算单个设备丢失的数据。所需的最少设备数量为3个 (unless converting from 2 legged raid1 to reshape to more stripes; seereshaping).
lvcreate --type raid5 [--stripes Number --stripesize Size] VG [PVs]
--stripes Number
LV数据的设备数。这不包括lvm为存储奇偶校验块而添加的额外设备。带有数字条纹的raid5 LV需要数字+1设备。数字必须为2或更多。
--stripesize Size
条带的大小(以KB为单位)。这是移动到下一个设备之前写入一个设备的数据量。
PVs指定要使用的设备。如果未指定,lvm将选择第+1个单独的设备。
raid5被称为旋转奇偶校验,因为奇偶校验块以循环顺序放置在不同的设备上。raid5有多种不同的算法,用于放置奇偶校验块。默认变量是raid5_ls(raid5左对称,这是一个带数据重启的旋转奇偶校验0。)请参阅下面的RAID5 VARIANTS
SubLVs
LV通常是其他隐藏LV的组合,称为子LV。子虚拟机使用物理设备,或者由其他子虚拟机本身构建。子虚拟机保存LV数据块、RAID奇偶校验块和RAID元数据。子V通常是隐藏的,因此需要lvs -a选项来显示它们:
lvs -a -o name,segtype,devices
设备故障
RAID LV中的物理设备可能会由于多种原因发生故障或丢失。设备可能已断开连接、永久性故障或暂时断开连接。RAID LVs(级别1及更高)的目的是在降级模式下继续运行,即使在设备发生故障后也不会丢失LV数据。在不丢失LV数据的情况下发生故障的设备数量取决于RAID级别:
如果RAID LV缺少设备或存在其他与设备相关的问题,lvs会在健康状况(和属性)字段中报告:
lvs -o name,lv_health_status
激活丢失设备的LV
丢失设备的RAID LV可能会被激活或不被激活,这取决于lvchange中使用的“激活模式”:
lvchange -ay --activationmode complete|degraded|partial LV
更换设备
RAID LV中的设备可以由VG中的其他设备替换。更换系统上不再可见的设备时,请使用lvconvert --repair。更换仍然可见的设备时,请使用lvconvert --replace。repair命令将尝试恢复先前在LV中的相同数量的数据LV。replace选项重复替换多个PV。替换设备可以选择与任一选项一起列出。
lvconvert --repair LV [NewPVs]
lvconvert --replace OldPV LV [NewPV]
lvconvert --replace OldPV1 --replace OldPV2 LV [NewPVs]
刷新LV
刷新RAID LV将清除任何瞬时设备故障(设备暂时断开连接),并将LV返回到其完全冗余模式。恢复设备通常至少需要部分同步(请参阅同步)。未能清除瞬态故障会导致RAID LV在降级模式下运行,直到其重新激活。使用lvchange命令刷新LV:
lvchange --refresh LV
RAID TAKEOVER
RAID takeover是将RAID LV从一个RAID级别转换为另一个RAID级别,例如从raid5转换为raid6。更改RAID级别通常是为了增加或减少对设备故障的恢复能力,或是为了对LV进行重新restripe。这是使用lvconvert完成的,并将新RAID级别指定为LV type:
lvconvert --type RaidLevel LV [PVs]
最常见和推荐的RAID akeover 管转换有:
linear to raid1
which is a direct copy of the original linear image.
striped/raid0 to raid4/5/6
Adding parity devices to a striped volume results in raid4/5/6.
以下takeover转换目前是可能的:
between striped and raid0.
between linear and raid1.
between mirror and raid1.
between raid1 with two images and raid4/5.
between striped/raid0 and raid4.
between striped/raid0 and raid5.
between striped/raid0 and raid6.
between raid4 and raid5.
between raid4/raid5 and raid6.
between striped/raid0 and raid10.
between striped and raid4.
间接转换
从一个raid级别转换到另一个raid级别可能需要多个步骤,首先转换到中间raid级别
linear to raid6
将LV从线性转换为raid6:
convert to raid1 with two images
convert to raid5 (internally raid5_ls) with two images
convert to raid5 with three or more stripes (reshape)
convert to raid6 (internally raid6_ls_6)
convert to raid6 (internally raid6_zr, reshape)
执行上述步骤的命令如下:
lvconvert --type raid1 --mirrors 1 LV
lvconvert --type raid5 LV
lvconvert --stripes 3 LV
lvconvert --type raid6 LV
lvconvert --type raid6 LV
从raid6_ls_6到raid6_zr的最终转换是为了避免由于专用奇偶校验设备而导致raid6_ls_6中潜在的写/恢复性能降低。raid6_zr旋转数据和奇偶校验块以避免这种情况。
linear to striped
要将LV从linear转换为striped,请执行以下操作:
convert to raid1 with two images
convert to raid5_n
convert to raid5_n with five 128k stripes (reshape)
convert raid5_n to striped
执行上述步骤的命令包括:
lvconvert --type raid1 --mirrors 1 LV
lvconvert --type raid5_n LV
lvconvert --stripes 5 --stripesize 128k LV
lvconvert --type striped LV
使用步骤2中的raid5_n类型是因为它在末尾有专用的奇偶校验子LV,并且可以直接转换为striped.在步骤3中增加条带大小,为转换过程添加额外空间。此步骤将LV大小增加五倍。转换后,可以减少额外的空间(或使用LV扩展文件系统)。
Reversing 这些步骤会将条带状LV转换为线性LV
RAID整形
RAID重塑是在保持相同RAID级别的同时更改RAID LV的属性。这包括更改RAID布局、条带大小或条带数量。
RAID5变体
raid5_ls
RAID5 左对称
带数据重启的轮转奇偶校验N
raid5_la
RAID5左不对称
带数据延续的旋转奇偶校验N
raid5_rs
RAID5右对称
Rotating parity 0 with data restart
raid5_ra
RAID5右不对称
Rotating parity 0 with data continuation
raid5_n
RAID5奇偶校验n
用于条带化/raid0转换的专用奇偶校验设备n
用于RAID接管Takeover
参考
dm-raid — The Linux Kernel documentation
https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/dm-raid.html
lvmraid
https://www.linux.org/docs/man7/lvmraid.html
LVM stripe addition failing with "1 extents needed, but only 0 available" or "Insufficient suitable allocatable extents for logical volume"
https://access.redhat.com/solutions/3264531
LVM caching
lvm(8)包括两种缓存,可用于提高逻辑卷(LV)的性能。缓存时,LV数据的不同子集临时存储在更小更快的设备(如SSD)上,以提高LV的性能。
要使用lvm实现这一点,首先从速度更快的设备创建一个新的特殊LV。此LV将保存缓存。然后,新的快速LV通过lvconvert命令连接到主LV。lvconvert将一个设备映射器缓存目标插入到主LV的i/o路径中。device mapper target将主LV和快速LV组合成一个看起来像主LV但性能更好的混合设备。在使用主LV时,其部分数据将临时透明地存储在专用fast LV上。
两种缓存是:
使用dm cache内核模块的读写热点缓存。此缓存跟踪访问模式并有意调整其内容,以便在快速存储器上找到主LV的常用部分。LVM使用LV类型缓存来引用它。
使用dm writecache内核模块的写缓存。此缓存可与SSD或PMEM设备一起使用,以加速对主LV的所有写入。从主LV读取的数据不存储在缓存中,只存储新写入的数据。LVM使用LV类型的writecache来引用它。
除极客外, 一般情况不需要缓存盘. 包括做种不多的下载盘
参考文档:lvmcache(7) manpage
CEPH
Ceph 访问方式
Ceph 原生 API (librados)
实施其他 Ceph 接口(例如 Ceph Block Device 和 Ceph Object Gateway)的基础库是 librados
librados 是原生 C 库,允许应用直接使用 RADOS 来访问Ceph 集群中存储的对象。也有类似的库适用于 C++、Java、Python、Ruby 和 PHP
为最大化性能,请编写软件以直接与 librados 配合使用
为了简化对 Ceph 存储的访问,可以改为更高级访问方式,如RADOS Block Device、Ceph Object Gateway(RADOSGW)和 CephFS
RADOS 块设备
Ceph Block Device(RADOS Block Device 或 RBD)通过RBD image 在 Ceph 集群内提供块存储
组成 RBD 的对象分布到不同的 OSD,对块设备的访问自动并行处理
Ceph Object Gateway(RADOS Gateway)
Ceph 对象网关(RADOS 网关、RADOSGW 或 RGW)是使用 librados 构建的对象存储接口,通过 RESTful API 为应用提供了网关,并且支持两种接口:Amazon S3 和 OpenStack Swift
Ceph File System(CephFS)
CephFS 是一种并行文件系统,提供可扩展的、单层级结构共享磁盘。红帽 Ceph Storage 4 提供对 CephFS 的生产环境支持,包括快照支持
Ceph Metadata Server (MDS) 管理 CephFS 中文件的元数据。包括文件的访问、更改 和修改时间戳等信息
了解池
池是用来存储对象的逻辑分区。Ceph 客戶端将对象写入池中
池类型
池类型有复制池和纠删代码池
复制池是默认的池类型,将对象复制到多个 OSD ,需要更多的存储空间,但读操作不受副本丢失的影响
纠删代码池需要的存储空间和网络带宽较小,但因为奇偶校验计算,计算开销会更高一些
对于不需要频繁访问且不需要低延迟的数据,可选择纠删代码池
对于经常访问并且需要快速读取性能的数据,选择复制池
创建复制池
Ceph 通过创建对象的多个副本来保护复制池中的数据,称为副本(replica)。副本存储在池中的不同 OSD 中,一个或多个OSD 出现故障时,对象中的数据会得到保护
配置纠删代码池
纠删代码池使用纠删代码而非复制来保护对象数据
纠删代码池中存储的对象分割为多个数据区块,这些数据区块存储在不同的 OSD 中。此外,根据数据区块计算一系列编码区块,它们也存储在不同的 OSD 中。当含有区块的 OSD 出现故障时,可利用编码区块来重建对象的数据
Ceph 文件系统和 MDS
Ceph 文件系统 (CephFS) 是一种兼容 POSIX 的文件系统,可以像使用传统文件系统一样整理自己的数据
若要实施 Ceph 文件系统,需要一个正在运行的 Ceph 存储集群;至少一台 Ceph 元数据服务器 (MDS) 来管理元数据
与 RBD 和 RGW 一样,CephFS 服务使用 librados 的原生接口
SAMBA
描述SMB
Server Message Block (SMB) 是 Microsoft Windows 的标准文件共享协议。
配置独立服务器是最简单的方法,其中服务端和客戶端是Windows 工作组成员。服务器在本地管理用戶帐戶和密码
更复杂的配置使用 Microsoft Active Directory (AD) 通过域控制器来协调用戶身份验证
RHEL 支持访问和提供 SMB 文件共享。客戶端安装 cifs-utils软件包;服务端安装 samba 软件包
使用 SMB 共享目录
Samba 共享 Linux 目录。服务端在其 Samba 数据库中管理用戶帐戶,并为本地 Windows 工作组的成员提供文件共享
SMB 共享目录的基本步骤如下:
安装 samba 软件包
准备要共享的目录
配置 /etc/samba/smb.conf 文件
设置适当的 Linux 用戶,并在 Samba 数据库中配置它们
启动 Samba 并打开防火墙
从客戶端系统挂载 SMB 共享,验证配置
安装 Samba 并准备要共享的目录
在 Samba 服务器上安装 samba 软件包
[root@host ~]
创建要共享的目录
[root@host ~]
设置 Linux 访问权限
Samba 将其用戶帐戶映射到 Linux 用戶,可使用 Linux 文件权限控制对目录的访问
[root@host ~]
[root@host ~]
[root@host ~]
SGID位确保新文件自动属于developers组
设置 SELinux context 类型
将目录 context 类型设为 samba_share_t
[root@host ~]
[root@host ~]
*Samba 还支持使用 SELinux public_content_t(只读)和public_content_rw_t (读/写)type 标记的文件。对于public_content_rw_t type,启用 SELinux smbd_anon_write 布尔值以允许读/写访问。当希望 Apache服务器或 NGINX 能够提供共享目录内容或写入到其中时,这两种 SELinux 类型非常有用
配置 Samba
Samba 配置文件是 /etc/samba/smb.conf
/etc/samba/smb.conf 以 [global] 部分开头。该部分提供常规配置和默认值,可在后续部分中覆盖。下一部分定义文件或打印机共享。; 或 # 表示注释
配置全局部分
[global] 部分定义 Samba 服务器的基本配置,主要参数如下
workgroup:指定服务器的 Windows 工作组,默认值为WORKGROUP
security:控制 Samba 如何对客戶端进行身份验证。默认值security = user,客戶端使用本地 Samba 数据库中的用戶名和密码来登录
server min protocol:指定服务端支持的最小 SMB 版本。服务器默认支持所有版本的协议,并与客戶端协商版本。由于第一个版本 SMB1(或 CIFS)存在安全问题,因此红帽建议将 server min protocol 设置为 SMB2。但 Microsoft Windows XP 或更早版本的客戶端将无法访问服务端,因为它们仅支持 SMB1。SMB 协议的当前版本是 3
smb encrypt:激活流量加密。服务端和客戶端默认会协商加密。若要强制加密,将 smb encrypt 设为 required ,并将server min protocol 设为 SMB3。只有 SMB3 提供对加密的原生支持。Microsoft Windows 8、Microsoft Windows Server 2012 和更高版本的操作系统支持加密的 SMB3
配置共享部分
在 [global] 部分后面,在自定义部分中定义共享。方括号中定义共享的名称,此部分中最有用的指令如下
path:在服务器上共享的目录名称
writeable:经过身份验证的用戶对共享的读/写访问权限(yes 或 no),默认为 no
write list:当 writeable 设为 no,可使用 write list 提供具有读/写访问权限的用戶列表。不在列表中的用戶仅有读权限。@字符表示 Linux 组
write list = operator1,
valid users:所有经过身份验证的用戶默认都可以访问该共享。使用 valid users 限制访问权限,用戶列表用逗号分隔
下例定义 devcode 共享,授予对 /srv/smbshare 的访问权限。所有经过身份验证的用戶都对共享具有读权限,但只有developers 组员具有读/写权限
[devcode]
path = /srv/smbshare
write list = @developers
下例仅 developers 组和 operator1 用戶允许访问,从而限制对共享的访问。operator1 仅有读权限,因为它不在 write list中
[devcode]
path = /srv/smbshare
valid users = operator1,
write list =
验证配置文件
运行 testparm 命令验证 /etc/samba/smb.conf
[root@host ~]# testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
Enter
...output omitted...
准备 Samba 用户
每个 Samba 帐戶必须有联名的 Linux 帐戶。要创建仅限于Samba 的用戶帐戶,需锁定其 Linux 密码,并将登录设置为/sbin/nologin,防止用户 ssh 登录
[root@host ~]
将用戶添加到 Samba 数据库,使用 smbpasswd -a username,命令会提示输入密码
[root@host ~]# smbpasswd -a operator1
New SMB password: redhat
Retype new SMB password: redhat
Added user operator1.
若要从 Samba 数据库中删除用戶,使用 -x 选项
[root@host ~]# smbpasswd -x operator1
Deleted user operator1.
还有更强大的 pdbedit 命令。例如,可使用 pdbedit -L 命令列出 Samba 数据库中的用戶。可参考 pdbedit(8) man page
Samba 数据库在 /var/lib/samba/private/。切勿直接修改该目录中的文件
启动 Samba
使用 systemctl 命令启用并启动 smb 服务
[root@host ~]# systemctl enable --now smb
打开 samba firewalld 服务,允许对端口 139/TCP 和端口445/TCP 的访问
[root@host ~]
[root@host ~]
注:Samba 定期检查 /etc/samba/smb.conf 是否被更改。如果已更改,则 Samba 自动重新加载配置文件,这将不会影响已经建立的连接
挂载 SMB 文件系统
Microsoft Windows 和 Linux 系统均可访问 SMB 共享
在 Linux 上,安装 cifsutils 软件包,可在本地系统上挂载SMB 共享
在 Linux 上,可用 //servername/sharename 表示法访问共享。标准 Microsoft Windows 统一命名约定是\servername\sharename,用于表示网络资源。但 \ 在 shell 中是转义符,因此 Linux 改用 / 字符
若要挂载 SMB 共享,必须提供用戶凭据以向 Samba 服务器进行身份验证。这些凭据决定了对共享上的文件的访问权限。
对于手动挂载,可使用 username 挂载选项,会提示用戶输入密码
[root@host ~]# mount -o username=operator1 //host.example.com/devcode /mnt
Password for operator1@//host.example.com/devcode: redhat
若要自动挂载,在 /etc/fstab 添加 credentials 选项
//host.exmaple.com/devcode /data cifs credentials=/etc/samba/credentials 0 0
凭据文件包含用戶名和密码
[root@host ~]# cat /etc/samba/credentials
username=operator1
password=redhat
由于凭据文件包含密码,请将文件存储在安全目录中,并限制其访问权限
[root@host ~]
[root@host ~]
请求加密:
若要强制 SMB 流量加密,将 seal 选项与 mount 命令配合使用
//host.example.com/devcode /data cifs credentials=/etc/samba/credentials,seal 0 0
执行多用户 SMB 挂载
当使用 credentials 或 username 选项挂载 SMB 共享时,凭据由本地系统上的所有用戶使用
理想情况下,希望每个用戶使用自己的 SMB 凭据来确定对共享的访问权限。可以、使用 multiuser 挂载选项
在使用 multiuser 时,可让 root 用戶使用对共享具有最少访问权限的凭据。当用戶登录时,他们使用 cifscreds 命令将他们的SMB 密码临时添加到安全内核密钥环中。然后,客戶端的Linux 内核将使用其 SMB 凭据来确定对共享的访问权限,而不是 root 的凭据。
下列步骤描述了 multiuser 选项的系统配置:
创建用于挂载 SMB 共享的凭据文件。凭据文件中的默认用戶须具有对 SMB 共享的最少访问权限(读取权限)
将 multiuser 选项添加到加载命令。以下 /etc/fstab 条目使用credentials 和 multiuser 选项
//host.example.com/devcode /data cifs credentials=/etc/samba/credentials,multiuser 0 0
使用 mount 命令挂载 SMB 共享
在访问挂载点之前,用戶应运行 cifscreds 命令以提供其凭据
[developer@client ~]$ cifscreds add host.example.com
Password: redhat
cifscreds 的 add 子命令将 SMB 凭据加载到内核密钥环。clear 子命令将用戶凭据从特定主机的内核密钥环中删除。update 子命令可将内核密钥环中的凭据替换为新用戶和密码的凭据
参考文档:samba(7)、smb.conf(5)、testparm(1)、smbpasswd(8)、pdbedit(8)、mount.cifs(8) 和 cifscreds(1) manpage
podman
什么是 Podman
Podman 是一个开源的容器运行时项目,可在大多数 Linux 平台上使用。Podman 提供与 Docker 非常相似的功能。正如前面提到的那样,它不需要在你的系统上运行任何守护进程,并且它也可以在没有 root 权限的情况下运行。
Podman 可以管理和运行任何符合 OCI(Open Container Initiative)规范的容器和容器镜像。Podman 提供了一个与 Docker 兼容的命令行前端来管理 Docker 镜像。
安装 Podman
Podman 目前已支持大多数发行版本通过软件包来进行安装,下面我们来举几个常用发行版本的例子。
Fedora / CentOS
$ sudo yum -y install podman
Ubuntu
$ sudo apt-get update -qq$ sudo apt-get install -qq -y software-properties-common uidmap$ sudo add-apt-repository -y ppa:projectatomic/ppa$ sudo apt-get update -qq$ sudo apt-get -qq -y install podman
MacOS
$ brew cask install podman
RHEL 7
$ sudo subscription-manager repos --enable=rhel-7-server-extras-rpms$ sudo yum -y install podman
Arch Linux
$ sudo pacman -S podman
更多系统的安装方法,可参考官方文档:https://github.com/containers/libpod/blob/master/install.md
使用 Podman
运行一个容器
$ podman run -dt -p 8080:8080/tcp \-e HTTPD_VAR_RUN=/var/run/httpd \-e HTTPD_MAIN_CONF_D_PATH=/etc/httpd/conf.d \-e HTTPD_MAIN_CONF_PATH=/etc/httpd/conf \-e HTTPD_CONTAINER_SCRIPTS_PATH=/usr/share/container-scripts/httpd/ \registry.fedoraproject.org/f27/httpd /usr/bin/run-httpd
列出运行的容器
$ podman ps -a
分析一个运行的容器
$ podman inspect -l | grep IPAddress\":"SecondaryIPAddresses": null,"IPAddress": "",
查看一个运行中容器的日志
$ sudo podman logs --latest10.88.0.1 - - [07/Feb/2018:15:22:11 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"10.88.0.1 - - [07/Feb/2018:15:22:30 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"10.88.0.1 - - [07/Feb/2018:15:22:30 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"10.88.0.1 - - [07/Feb/2018:15:22:31 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"10.88.0.1 - - [07/Feb/2018:15:22:31 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"
查看一个运行容器中的进程资源使用情况
$ sudo podman top <container_id> UID PID PPID C STIME TTY TIME CMD 0 31873 31863 0 09:21 ? 00:00:00 nginx: master process nginx -g daemon off; 101 31889 31873 0 09:21 ? 00:00:00 nginx: worker process
停止一个运行中的容器
$ sudo podman stop --latest
删除一个容器
$ sudo podman rm --latest
以上这些特性基本上都和 Docker 一样,Podman 除了兼容这些特性外,还支持了一些新的特性。
给容器设置一个检查点
根据检查点位置恢复容器
迁移容器
配置别名
Podman 如何实现开机重启容器
参考
Podman解析 https://www.jianshu.com/p/3fc6eff747ab
KVM
KVM
KVM是linux内核的模块,它需要CPU的支持,采用硬件辅助虚拟化技术Intel-VT,AMD-V,内存的相关如Intel的EPT和AMD的RVI技术,Guest OS的CPU指令不用再经过Qemu转译,直接运行,大大提高了速度,KVM通过/dev/kvm暴露接口,用户态程序可以通过ioctl函数来访问这个接口。
QEMU
Qemu是一个模拟器,它向Guest OS模拟CPU和其他硬件,Guest OS认为自己和硬件直接打交道,其实是同Qemu模拟出来的硬件打交道,Qemu将这些指令转译给真正的硬件。
qemu-kvm
Qemu将KVM整合进来,通过ioctl调用/dev/kvm接口,将有关CPU指令的部分交由内核模块来做。kvm负责cpu虚拟化+内存虚拟化,实现了cpu和内存的虚拟化,但kvm不能模拟其他设备。qemu模拟IO设备(网卡,磁盘等),kvm加上qemu之后就能实现真正意义上服务器虚拟化。因为用到了上面两个东西,所以称之为qemu-kvm。
libvirt
libvirt是目前使用最为广泛的对KVM虚拟机进行管理的工具和API。Libvirtd是一个daemon进程,可以被本地的virsh调用,也可以被远程的virsh调用,Libvirtd调用qemu-kvm操作虚拟机。
virt-manager
virt-manager是用于管理KVM虚拟环境的主要工具,virt-manager默认设置下需要使用root用户才能够使用该工具。当你想在KVM hypervisor服务器上托管虚拟机,由最终用户而非root用户访问这些虚拟机时并不总是很便利。
WebVirtMgr
WebVirtMgr采用几乎纯Python开发,其前端是基于Python的Django,后端是基于Libvirt的Python接口,将日常kvm的管理操作变的更加的可视化。
Aria2
Aria2是一款开源下载工具,可帮助简化不同设备和服务器之间的下载过程。它支持磁力链接、BT种子、http等类型的文件下载,与迅雷及QQ旋风相比,Aria2有着优秀的性能及较低的资源占用,架构本身非常轻巧,通常只需要4兆字节(HTTP下载)到9兆字节(用于BitTorrent交互)之间。
Jellyfin
Plex、Emby、Jellyfin是功能类似的三款媒体影音管理软件,支持多平台、刮削影片生成海报墙显示丰富的电影信息、在服务器端存储资料信息,实现多设备同步观影进程、远程播放、为播放端硬件转码视频等。