cloud-atlas-draft
  • README
  • 服务器
    • 内存
      • MLC - Intel内存延迟测试工具
    • IPMI
      • ipmitool使用tips
      • 服务器oob带外访问设置
      • ipmi操作和对应的sel日志记录
      • BMC故障导致kipmi0极高的CPU使用
      • HP服务器frimware问题导致ACPI缓存大小相关报错
      • server/ipmi/使用ipmitool在Linux平台配置IPMI
      • 系统日志IPMI message handler: BMC returned incorrect response
      • 串口管理程序conman
    • BIOS
      • 通过linux命令行修改服务器BIOS配置
      • 使用AMI SCELNX修改BIOS设置
      • Dell BIOS设置案例(关闭IR-SRV)
      • 在Linux中通过命令行修改BIOS
      • BIOS/UEFI和EDK
    • 传感器
      • 检查CPU温度
    • Open Compute
      • 服务器选型
  • 操作系统
    • Linux
      • 启动
        • RHEL7升级后磁盘设备label识别错误处理
        • 系统重启时间检查
      • 进程
        • 进程管理
          • 进程状态标志的含义
          • 运行队列中进程排查方法
          • ps命令tips
          • 杀掉多个进程的方法
          • 使用nice调整进程优先级
          • 检查进程的内存使用
          • 查看进程的线程方法
          • top命令使用tips
          • 显示最消耗cpu资源的进程
          • 检查进程运行在哪个CPU上
          • 检查进程启动时间
          • 检查进程使用网络端口
          • 控制台输出"INIT: Id "c0" respawning too fast: disabled for 5 minutes"
          • cron定时执行任务
        • SELinux
        • 线程
          • 进程和线程
          • 检查线程的方法
          • 内核线程
      • 日志
        • 日志文件管理
        • logrotate日志轮转工具
        • logwatch日志监视工具
        • mcelog系统硬件诊断日志搜集工具
        • systemd环境syslog-ng启动失败排查
        • syslog-ng部署和维护
        • tmp临时文件目录自动清理
        • 禁止日志打印到控制台
      • 内核
        • Linux资源管理
          • Cgroup快速起步
            • 如何限制进程使用的内存
            • Cgroup的CPU使用统计控制器
            • Cgroup v2简介
          • 在RHEL6中的Cgroups
            • RHEL6 Cgroups概述
            • RHEL6 使用控制组
          • 在RHEL7中的Cgroups
            • RHEL7 Cgroups概述
            • RHEL7 使用控制组
            • RHEL7 使用libcgroup工具
            • libvirtd日志报错virCgroupSetValueStr"No space left on device"
        • 网络
          • 多网卡bonding
            • Linux以太网Bonding驱动
            • 不断网在线修改bonding网卡MTU
          • 系统日志"TCP: time wait bucket table overflow"分析
          • Linux上禁用IPv6
          • 内核参数网络配置案例
          • SYN攻击、SYN cookie和其他
          • dmesg日志"TCP:unexpectedly shrunk window"
          • TCP拥塞控制
          • 通过BBR TCP拥塞控制算法加速Internet速度
          • 在Ubuntu 18上启用TCP BBR加速网络性能
          • ssh连接超时"Connection timed out"和内核tcp_syn_retries
        • 内核中日志模块和参数
          • 系统日志"__ratelimit: N callbacks suppressed"分析
        • cpu
          • CPU型号和分类
          • cpuinfo无法显示部分core
          • cpu_affinity
          • 中断和smp_affinity
          • 内核线程"migration"和CPU使用
          • 软中断
          • IRQ进程
          • 微代码Microcode
          • Linux 时钟管理
          • Intel Turbo Boost技术和intel_pstate
          • intel_pstate驱动详解
          • acpi-cpufreq主频设置
          • 修改ACPI事件:更改电源键默认操作
          • 笔记本suspended后数秒无故wake up问题排查("ACPI: Waking up from system sleep state S3")
          • 系统负载Load Averages的含义
          • 分析Intel CPU Machine Check Exception(MCE)
          • "NOHZ: local_softirq_pending 100"
          • "NETDEV WATCHDOG: slave0 (bnx2): transmit queue 5 timed out"内核Panic排查
          • Intel Skylake/Kaby Lake处理器系列简介
          • Intel Skylake/Kaby Lake处理器超线程bug及处理
          • dmidecode分析
          • "unchecked MSR access error"
          • AMD处理器ZEN一代之国产化海光
        • 内核调度
          • Linux内核调度基础知识
          • unthrottle_cfs_rq错误修复
        • 内核模块
          • 内核模块参数
          • 内核模式设置KMS
          • DKMS动态内核模块支持
          • dracut简介
        • 内存
          • 内存管理技术简介
            • 概述
          • 透明大页(Transparent Hugepages, THP)
            • 透明大页(Transparent Hugepage)
            • 在Red Hat Enterprise Linux 6/7中使用、监控和禁用透明大页
          • NUMA
            • NUMA node interleaving
            • 从UMA到NUMA
          • RDT
          • order 1内存页分配错误
          • 内核同页合并
          • 检查进程使用内存
          • 缓存清理(drop_caches)和内存压缩(compact_memory)
        • 存储
          • 块设备持久化命名
          • 块设备阻塞事件
          • kworker任务阻塞超过120秒
          • 热插拔磁盘识别
        • 内核跟踪排查
          • 为什么会发生segfault
          • 内核bug排查方法
          • 调试系统错误(Debugging System Faults)
          • 获取内核core dump
          • "Uhhuh. NMI received for unknown reason NN on CPU X"
          • kdump over nfs
          • kdump之后挂起启动而不重启
          • 获取XEN内核core dump
          • Core dump分析
          • 在core文件生成过程中压缩生成的core文件
          • 高Sys CPU的排查
          • debug呆滞的进程
          • 排查XEN服务器hang机core dump
          • vmcore分析案例:"kernel BUG at fs/buffer.c:1270"
          • 获取MySQL core
          • 在CentOS 5.11中编译crash
          • "Kernel panic - not syncing: stack-protector: Kernel stack is corrupted"
          • "hrtimer: interrupt took xxxx ns"和"NOHZ: local_softirq_pending 100"
          • "AER: Multiple Corrected error received"
          • top始终显示load 1
          • gdb和debuginfo
        • Kernel Panic案例
          • not syncing: Attempted to kill init! exitcode=0x00007f00
        • 性能
          • perf-tools性能工具
          • "perf samples too long"是什么?
          • Perf案例(译)
        • 补丁
          • ksplice, kpatch,kexec 技术简介
      • 设备管理
        • 随机数生成器RNG
        • udev
          • udev设备管理架构
        • pcie
          • 深入TLP:PCI exporess设备通讯原理
      • 存储
        • 磁盘
          • IO scheduler
          • 持久化块设备命名
          • parted磁盘工具
          • 磁盘分区4k对齐优化性能
          • Linux分区破坏的修复
          • 混合HDD/SDD的IO scheduler设置
          • 通过block_dump实时监测LinuxIO
          • 检查磁盘I/O负载
          • iotop监视磁盘访问
        • RAID
          • 在Linux中构建RAID
        • LVM
          • Linux卷管理
          • 扩展lvm卷
          • 缩小lvm卷
          • 在Gentoo上使用LVM
          • 执行pvcreate报错"Device /dev/XXX excluded by a filter."
        • 文件系统
          • Linux文件系统的未来
          • EXT文件系统
            • EXT文件系统文件数
            • EXT文件系统误删文件恢复
            • noatime参数挂载文件系统降低IO
            • 获取文件系统挂载的时间点
            • EXT3文件系统转换成EXT4
            • EXT4文件系统优化
            • EXT3文件系统报错"block bitmap and bg descriptor inconsistent"
            • EXT文件系统坏超级块恢复
            • EXT4根文件系统resize
            • EXT4文件系统dioread_nolock + nodelalloc 挂载选项异步写性能问题
            • disk label
            • 找出使用inode最多的文件目录
          • Btrfs文件系统
            • Btrfs文件系统快速起步
          • XFS文件系统
            • 重命名home目录提示"Device or resource busy"
            • xfs文件系统挂载参数
          • ZFS文件系统
            • ZFS dataset丢失排查
            • ZFS替换故障磁盘
            • ZFS高速IO缓存配置
          • FAT文件系统
            • 在Fedora中访问ExFAT文系统
          • 性能
            • iowait
        • 网络块设备(Network Block Device, nbd)
          • nbd概览
      • 网络
        • 网络协议
          • ARP
            • "arp incomplete"问题排查
        • iproute2
          • ip
        • 多网卡bonding
          • suse操作系统多网卡bonding
        • 可伸缩网络堆栈
          • RSS
        • 防火墙
          • Iptables
            • Iptables简易指南
            • CentOS设置HTTP访问iptables
          • Firewalld
            • 在CentOS7上添加防火墙端口允许访问
            • Firewalld丰富而直接的规则:设置Fedora/CentOS 7作为路由器
          • ufw
            • 使用ufw配置NAT masquerade
        • 交换机
          • 构建Linux三层交换机
          • USB over IP
          • Ethernet over USB
      • 备份
        • 使用tar备份完整Linux操作系统
        • 使用rsync备份完整Linux操作系统
      • 安全
        • 审核
          • 系统审核架构
          • 系统审计部署
          • 找出瞬间消失的TCP网络连接进程
          • 找出inode消耗原因
        • 防火墙
          • Linux防火墙简介
      • Red Hat
        • Fedora
          • 在MacBook Pro上实现Fedora和macOS双启动
          • 使用dnf对Fedora进行系统大版本升级
          • 升级到Fedora 27之后内核安装后不更新grub问题处理
          • Fedora x86_64操作系统兼容运行32位程序
          • 使用dnf安装源代码rpm
          • 在Fedora中使用BCM4360无线网卡
          • Fedora设置fcitx中文输入
          • GoldenDict和英中字典设置
          • 在Fedora中使用LXQt桌面
          • 定制LXQt桌面菜单(添加新应用启动)
          • 使用ImageMagick截屏
          • 在LXQt桌面平铺窗口
          • 在Fedora中切换桌面环境
          • 在Xfce桌面禁用alt+鼠标左键移动窗口功能
          • nVidia GT 750M显卡
          • 在Fedora中播放mp4视频
          • 在Fedora的chromium中播放flash
        • CentOS
        • 系统管理
          • CentOS/RHEL周期性自动清理/tmp目录
          • Linux操作系统登录超时设置
          • Grub 2 boot loader
            • Grub快速起步
            • 在grub2中切换默认启动内核
            • 修改grub2启动内核参数
            • 启动进入终端模式
            • EFI系统分区
          • OpenMLI
          • Systemd
            • 创建systemd服务单元
            • systemd修改主机名
            • systemd清理journal日志
            • systemd管理cpupower
            • systemd管理rc.local启动
            • 使用journalctl检查和维护systemd日志文件
            • 通过systemd设置禁止合上笔记本屏幕suspend
            • 合上笔记本屏幕时关闭屏幕
            • 通过systemd设置fedora系统hibernate休眠
            • systemd-logind高负载和内存泄漏问题排查
            • syslog-ng和systemd-journal远程日志存储
            • systemd-journal日志转发syslog
            • 在远程NFS存储上保存Linux系统日志
            • systemd-resolvd本地网络域名解析服务
            • 排查systemd-networkd配置问题
          • Network
            • CentOS7关闭IPv6
            • CentOS 7设置静态IP
            • NetworkManager命令行配置
            • 在NetworkManager管理的网络连接保持DHCP同时添加静态IP地址
            • 修改默认ens33网卡命名为传统eth0
        • rpm软件包管理
          • "无法获得metalink"错误
          • rpm使用tips
          • 检查和解压缩rpm包内容
          • 定时yum更新系统
          • 最小化安装后的yum安装
          • yum使用tips
          • 使用源代码RPMs
          • 使用dnf管理软件包
          • 转换AliOS到CentOS
          • 绝对不要删除keyutils-libs软件包
          • 无需安装的解压缩rpm文件
          • CentOS 5平台通过yum安装git
          • 跨OS平台构建rpm包
          • 升级CentOS 5系统的autoconf和automake工具
          • 通过yum-builddep安装所有从SRPM编译RPM包所依赖软件包
          • 执行"dnf upgrade"时报错"Error unpacking rpm package"处理
          • 执行"rpm -Uvh --force xxx.rpm --nodeps"返回错误码135
          • rpm命令报错"error: Failed to initialize NSS library"
          • 清理系统不使用的旧内核
        • RHEL/CentOS启动服务Tips
      • Debian
        • deb软件包管理
          • Debian最小化安装后的软件包安装建议
          • Debian安装源修改
          • Debian apt-get update出现软件包Hash Sum mismatch处理
          • 升级Debian 8 Jessie到Debian 9 Stretch
          • DEB和RPM安装包互相转换
      • Ubuntu
        • Ubuntu安装部署
          • 使用tar方式备份和恢复系统
          • 使用tar包手工安装多重启动的ubuntu
          • Ubuntu的Hardware Enablement(HWE)内核
          • "admin"账号已被Ubuntu保留无法使用
          • 在U盘上安装Ubuntu
          • Ubuntu 18.10安装NVIDIA驱动
          • 创建具有持久化存储的Live Ubuntu U盘
          • 安装XUbuntu
          • 在MacBook Pro上安装Ubuntu Server
          • 在MacBook Air上运行Ubuntu
          • 在MacBook Pro上运行ubuntu设置WIFI
          • apt upgrade之后提示"you may need to re-run your boot loader[grub]"
          • 设置apt通过代理安装软件
          • 选择最快的apt镜像网站
          • 升级Ubuntu系统到18.04 LTS Bionic Beaver
          • 避免Ubuntu内核升级
          • 使用.iso镜像或U盘作为APT软件仓库
          • 升级提示"packages have been kept back"
        • Ubuntu系统管理
          • 检查Ubuntu系统版本
          • sudo NOPASSWD不工作问题处理
          • Ubuntu启动字符模式
          • Ubuntu字符终端字体大小调整
          • Ly字符终端显示管理器
          • tessellimage进程
          • 网络
            • Ubuntu基本网络配置
            • 802.1x网络认证
      • Arch
        • Arch Linux包管理
        • Arch Linux本地化
        • 将Linux主机模拟成蓝牙键盘和鼠标
        • Arch Linux静态IP和动态IP配置
        • unblock wifi in rfkill
      • Kali
        • Kali Linux基础
        • 创建Kali镜像仓库
        • Kali Linux初始化
        • 通过VNC访问Kali Linux
        • 矫正Kali Linux时间
        • 定制Kali Linux桌面i3窗口管理器
        • 定制Kali Linux桌面fluxbox窗口管理器
        • 在Kali Linux中修改网卡Mac地址
        • 使用终端方式在Kali Linux中配置Wi-Fi网络
      • Gentoo
        • 在MacBook上安装Gentoo
        • Portage包管理
        • gcc-config错误处理一例
        • nVidia显卡
        • intel显卡
        • 混合显卡切换
        • 从KDE桌面转向Xfce桌面
        • 安装Xfce工作平台
        • 中文输入
        • 安装Broadcom无线网卡
        • 电源管理:suspend和hibernate
        • emerge包管理tips
      • SuSE
        • 在SuSE中安装软件包
        • 在SuSE中设置rc.local
      • Linux From Scratch(LFS)
        • 前言
        • 介绍
        • 准备
        • 构建临时系统
      • X window
        • 从ma上访问远程X window
        • 使用macOS的Homebrew X window远程访问Linux
        • 在macOS上使用homebrew-xorg
        • 向X window程序发送字符串
        • 配置Ubuntu平台VNC服务
        • lightdm图形登陆管理器
        • X无法启动'drmSetMaster failed'
        • noVNC:在浏览器中运行VNC
        • Xpra跨平台远程显示服务器
        • Linux的鼠标采样率
    • FreeBSD
      • FreeBSD介绍
      • FreeBSD安装
      • 在FreeBSD上安装软件:Packages和Ports
      • 在ThinkPad上运行FreeBSD
      • FreeBSD无线网络
      • 基于FreeBSD的防火墙pfSense
    • Windows
      • firewall
        • 在Event Viewer中查看Firewall和IPsec事件
      • Windows 10
        • 不同版本Windows 10区别
        • 清理Windows 10磁盘空间
        • 压缩NTFS驱动器
      • Windoes 2012
        • 在Windows Server 2012安装和卸载GUI
      • Windows 2016
        • 在Windows Server 2016 1709上安装OpenSSH
        • 在Windows服务器上安装Windows Subsystem For Linux(WSL)
        • 在Windows上运行OpenSSH
        • 在Windows上后台运行命令(类似Linux的nohup)
      • rdesktop
        • Mac平台远程桌面
      • IIS Web服务
        • 设置IIS下载.iso文件
      • DEBUG
        • 触发Windows Crash(获取memory dump)
        • Windows异常的debug方法简介
      • Windows脚本
        • Windows的无限循环脚本
  • 数据库
    • mysql
      • 安装和升级
        • CentOS 5安装MySQL 5.7
        • 创建MySQL数据库和授权
        • MySQL数据库密码安全策略返回错误"ERROR 1819"
        • 允许ROOT用户远程访问MySQL
      • 快速起步
        • mysql查询命令输出无表格线
        • mysql启动报错"Another MySQL daemon already running with the same unix socket."
        • 查询最近一小时的数据行
      • MySQL脚本
        • 在Shell脚本中使用mysql
        • 使用my.cnf作为mysql命令行配置
      • SQL
        • 查询结果排序
        • 修改表结构
        • 查询当天数据
        • 查询当前时间之前X分钟
      • 磁盘I/O
        • 什么时候MySQL执行IO
        • 如何解决MySQL IOWait过高问题
      • 索引
        • 检查MySQL表索引
      • 备份
        • 使用mysqldump备份和恢复MySQL数据库
      • 主从同步
        • 如何诊断同步备库延迟
        • MySQL多线程复制
      • 故障排查
        • MySQL Root用户密码重置
    • Oracle
      • ARM环境Oracle客户端
  • 网络
    • TCP/IP
      • TCP连接数检查
      • traceroute检查网络可达性
    • 链路聚合
      • LACP
        • LACP原理
        • LACP的ad_select参数
        • LACP数据包分析
        • bonding网卡链路down
    • 网络数据包分析
      • tcpdump
        • tcpdump
        • tcpdump实例介绍
        • tcpdump避免"packets dropped by kernel"
        • 分析跟踪失败的TCP连接和RST数据包(TCP重传率高)
        • tcpdump在启用TCP卸载功能的网卡上报告"checksum error"
        • 结合ping和tcpdump快速定位网络问题
      • wireshark
        • 使用wireshark分析TCP重传
        • 以普通用户身份运行wireshark
        • 在macOS中同时运行多个wireshark
      • ntop
        • ntop架构
        • 在CentOS 7上安装ntop
        • ntopng开源替代
      • 网络数据包分析工具
        • iftop网络流量(ip+port)分析工具
        • tcptrack网络流量(ip+port)分析工具
        • nethogs网络流量分析工具
      • Cisco
        • Overlay Transport Virtualization (OTV)
        • 交换机
          • 小型商业用交换机
            • Cisco SLM2008 8端口小型千兆交换机
          • 数据中心交换机
            • Cisco Nexus交换机延迟监控工具
        • 防火墙
          • Cisco防火墙DoS防护
      • 服务质量(QoS)
        • QoS技术简介
  • 存储
    • 服务器直连存储DAS
      • mpt2sas
        • LSI SAS2308控制芯片
        • mpt2sas驱动系统日志分析
        • mpt2sas系统日志"0x3003010a"和奇怪的sdm磁盘设备
        • mpt2sas故障排查
          • mpt2sas驱动报错案例
          • mpt2sas故障磁盘剔除
      • S.M.A.R.T.
      • 磁盘检测技术
        • 磁盘健康检查
    • GlusterFS
      • GlusterFS服务器端Quorum
    • Ceph
      • Ceph架构
        • Ceph统一存储解决架构
        • Ceph RADOS
      • Ceph硬件
        • Ceph个人存储硬件选择
      • Ceph部署
        • 在树莓派上部署Ceph集群
      • Ceph配置
      • Ceph操作
      • Ceph监控
      • Ceph和OpenStack
      • Ceph性能优化
        • Ceph性能分析
    • SPDK
      • spoold的cpu affinity
    • VDO
  • 服务技术
    • Sendmail
      • Sendmail队列异常处理
    • ssh
      • ssh密钥
      • ssh客户端配置
      • ssh-keygen生成新的SSH密钥
      • ssh指定私钥和生成无密码密钥
      • ssh端口转发
      • ssh多路传输multiplexing加速
      • 使用sslh在443端口提供多种协议服务
      • sshd服务不能加载主机key
      • sshfs远程访问服务器文件系统
      • https服务访问报错"fips_pkey_signature_test:test failure"
      • 属于多个用户组的用户ssh登陆仅显示主用户组问题
      • 加速ssh登陆
      • sshd服务多端口设置
      • ssh登陆报错"PTY allocation request failed on channel 0"
    • DNS
      • DNSmasq
        • DNSmasq快速起步
      • DNS over HTTPS
        • 一份DNS over HTTPS的卡通化介绍
    • Nginx
      • 在Mac OS X环境使用HomeBrew安装Nginx
      • 在CentOS 5环境手工安装Nginx
      • CentOS快速部署nginx+php
      • h5ai-时尚的HTTP服务器索引
      • 排查Nginx应用响应时间
      • 设置Django和Nginx uWSGI
      • Nginx uWSGI错误日志"(13: Permission denied) while reading upstream"
      • 设置Django和Nginx uWSGI的多站点
      • Docker容器迁移后uWSGI运行报错"ImportError: No module named datetime"
      • Nginx的root和alias
    • OpenResty
      • OpenResty安装
      • OpenResty快速起步
    • HAProxy
      • HAProxy和Nginx软件负载均衡对比
      • 在CentOS7中部署HAProxy
      • 使用HAProxy实现MySQL负载均衡
    • Varnish
      • 在Ubuntu上部署Varnish
      • 在Mac上部署Varnish
    • Proxy
      • Squid vs. Varnish vs. Nginx
      • Polipo:小巧的web代理服务器
      • 设置代理服务器和匿名上网
      • 在macOS上部署squid
    • FTP
      • vsftpd
    • NFS
      • CentOS 7 NFS设置
      • Ubuntu 16 NFS设置
      • NFS挂载超时排查
    • Samba
      • CentOS 7 Samba配置
    • NTP
      • NTP服务基础配置
      • 快速校准时间
      • ntpq错误"Request timed out"排查
      • ntp_gettime() returns code 5 (ERROR)
      • 在Ubuntu系统部署NTP服务
      • 命令行设置系统时间
    • aria2
      • 使用多协议多线程下载工具aria2
      • 使用aria2 WEB前端yaaw
    • 流媒体
      • OBS Studio广播
  • 消息队列
    • RabbitMQ
      • 安装RabbitMQ
      • AMQP简介
    • kafka
    • Redis
  • 安全
    • VPN
      • OpenConnect
        • 在Android上使用OpenConnect连接ocserv
        • 安装使用OpenConnect
        • 部署ocserv VPN服务器
        • 部署支持证书的OpenConnect VPN服务器(ocserv)
        • 在Ubuntu上部署OpenConnect VPN服务器(ocserv)
        • 修订ocserv端口
      • Shadowsocks
        • Shadowsocks原理
        • 部署Shadowsocks服务器
        • 在CentOS 7上部署ShadowSocks服务器
        • 安装shadowsocks客户端
    • 无线安全
      • Captive Portal
        • Captive Portal简介
        • 部署WiFiDog实现Captive Portal
      • Linux 802.1x网络认证
  • 虚拟化
    • Captive portal认证
    • Intel
      • VT-x
      • VT-d
        • Intel虚拟化技术Directed I/O架构
      • 内存虚拟化:扩展页表EPT
      • I/O虚拟化:SR-IOV
        • SR-IOV技术介绍
        • 在CentOS中部署SR-IOV
      • I/O虚拟化:数据直接I/O(DDIO)
      • 网络数据虚拟化:DPDK
        • 如何判断网卡是否支持DPDK技术
        • 在Linux中使用DPDK
        • 使用Open vSwith实现DPDK加速虚拟机网络性能
      • GPU虚拟化:GVT
    • kvm
      • kvm虚拟化架构
      • kvm嵌套虚拟化
        • CentOS7的嵌套虚拟化(nested virtualization)部署实践
      • qemu
        • QEMU的vt-d
        • vIOMMU架构
        • qemu监控指令
      • virtio
        • virtio规格
        • virtio guest端实现:PCI, virtio设备,virtio网络和virtqueue
        • Windows虚拟机virtio驱动版本
      • kvm快速起步
        • 一:基于内核的虚拟机(KVM)概览
        • 二:Redhat企业Linux安装KVM
        • 三:RHEL 7.2 配置KVM主机
        • 四:使用命令行启动第一个KVM实例
        • 五:使用Virt-Manger(VMM)部署KVM实例
        • 六:如何克隆一个KVM虚拟机并重置该虚拟机
        • 七:如何在线添加/更改虚拟磁盘
        • 八:如何在线添加/移除虚拟机的内存
        • 九:如何在线添加/移除虚拟机的vCPU
        • 十:更改libvirt虚拟机镜像存储路径
        • 十一:实现Linux KVM在线迁移
        • 十二:RHEL7 Pacemaker - 配置高可用KVM虚拟机
        • kvm快速起步实战
          • 在CentOS中部署KVM
          • 在Ubuntu中部署KVM
          • 访问VM控制台
          • 访问(修改)虚拟机镜像
          • 使用libguestfs+NBD远程访问磁盘镜像
          • KVM libvirt静态IP地址和端口映射
          • 在Gentoo中部署KVM
          • 使用Btrfs部署KVM
          • Clone KVM虚拟机实战
          • 动态调整KVM虚拟机内存和vcpu实战
          • 添加和动态调整虚拟机数据磁盘
          • 调整虚拟机btrfs文件系统大小
          • 添加和更新虚拟机设备
          • Linux KVM在线迁移实战
          • 高可用KVM虚拟机实战
          • 使用virsh删除运行的KVM VM
          • KVM虚拟机vnc远程访问鼠标偏移修复
      • kvm虚拟化部署和管理
        • kvm guest虚拟机时间管理
        • 通过QEMU guest agent和spice agent增强虚拟化
      • Ubuntu环境KVM
        • 安装
        • 网络
        • 创建虚拟机
      • kvm虚拟化存储
        • KVM虚拟机磁盘镜像修改指南(libguestfs:译+实践)
      • kvm性能
        • KVM性能调优实战
          • KVM性能优化架构简述
          • 性能监控工具
          • 多队列virtio-net
          • 使用virtio模式安装Windows
          • 在虚拟化中使用NUMA
        • KVM网络性能调优
          • KVM halt polling系统
        • kvm性能优化
        • kvm最佳实践(汇总)
        • 对于虚拟CPU的KVM性能限制
        • 大页内存技术
        • 透明大页内存技术
        • 大页内存和透明大页内存技术对比
        • Intel VT技术中的Preemption Timer
      • kvm热迁移
        • Ubuntu Guest操作系统热迁移vm内部进程OOM
        • virsh保存和恢复虚拟机状态
      • kvm DEBUG
        • kvm vcpu unhandled rdmsr/wrmsr
        • 在KVM中运行windows 10响应缓慢且CPU sys占用严重的解决方法
      • kvm测试
        • kvm单元测试
    • libvirt
      • 开发
        • 编译libvirt
          • 在CentOS 5环境中编译libvirt
          • 使用src rpm编译libvirt
          • libvirt调试排错
        • 使用Python开发Libvirt应用
          • 热迁移
      • hook
        • 通过libvirt hooks实现特定系统管理
      • Qemu
        • Qemu镜像
        • libvirt pvpanic
        • CentOS pvpanic实现和测试
        • Windows pvpanic实现
        • Windows pvpanic测试
        • 虚拟机core dump引发时间偏移和矫正方法
        • nemu - 面向云计算的轻量版QEMU
      • 设备
        • 虚拟机串口控制台
        • 检查块设备任务
      • Libvirt网络
        • libvirt网络架构
        • libvirt中的防火墙和网络过滤
        • libvirtd无法初始化ip6tables table 'filter'
      • Libvirt日志
        • libvirt日志
        • libvirtd.log日志显示"warning : qemuDomainObjTaint"
        • libvirtd.log日志显示"invalid argument: disk hdc does not currently have a source assigned"
      • NAT网络
      • 远程访问VNC
      • virsh使用
    • 虚拟网络
      • vxlan
        • vxlan概览
      • 故障排查
        • 使用tcpdump排查虚拟机网络不通
        • 虚拟机ping延迟问题排查
    • 性能
      • CPU steal
    • docker
      • Docker for Mac
        • Docker for Mac快速起步
      • Docker Engine
        • 安装
          • 在RedHat安装Docker
          • 在Docker中运行CentOS
          • 在Gentoo安装Docker
            • Docker内核支持参数说明
          • 在Ubuntu安装Docker
          • 在OS X安装Docker
        • Docker 存储
          • Docker应用程序数据
          • 调整dokcer容器可用磁盘空间
      • Docker Debugging
        • 系统日志:"new mount options do not match the existing superblock"
      • Docker开发指南(学习和实践)
        • 容器技术简介
        • 安装Docker
        • Docker快速起步
        • Docker启动容器报错"error response from daemon: secret store is not initialized"
        • 使用Docker快速部署不同版本CentOS容器
        • Docker容器启动时启动服务
        • 操作系统重启时自动启动Docker容器
        • 在Docker容器中部署Python virtualenv环境
        • 映射Docker容器内服务端口提供外部服务
        • Docker卷
        • Docker架构
        • 在开发中应用Docker
        • Docker编排(compose)
        • 运行docker ce
        • 导入和到处Docker容器(跨主机迁移)
        • 从主机视角找出Docker容器的进程
        • 检查Docker日志
        • 在Docker容器中执行命令
    • CoreOS
      • CoreOS架构
    • Kata Containers
    • xen
      • xen架构
        • Xen Hypervisor
        • Xen Hypervisor Debug
        • XenStore和xenstored
        • Xen网络概述
        • Xen内存调优
      • xen快速起步
        • xen动态添加或移除guest内存或CPU
        • xen动态添加usb设备到guest操作系统
      • xen网络
        • Amzaon VPC XEN SR-IOV性能
        • Xen多个VLANs的网络配置
      • xen存储
        • blktap块设备
        • 在Xen中挂载iso镜像文件
      • xen Debug
        • 配置XEN虚拟机Kernel core dump
        • xm list执行报错"int exceeds XML-RPC limits"
    • VMware
      • VMware虚拟机的计时
      • VMware Fusion使用指南
      • 在VMware Fusion虚拟机CentOS Guest中安装Vmware Tool
      • 在VMware Fusion虚拟机中安装macOS
      • 在VMware虚拟机中使用UEFI firmware
      • 在VMware Fusion中复制虚拟机
      • 备份VMware虚拟机
      • VMware headless模式运行虚拟机
      • VMware Fusion虚拟机磁盘空间爆满
      • VMware无法启动macOS APFS文件系统的Time Machine备份恢复
    • PowerVM
      • PowerVM介绍
    • Anbox
      • Anbox架构简介
      • 在Fedora中部署Anbox
    • Atomic
    • LXD
    • VirtualBox
      • VirtualBox使用Tips
    • bhyve
    • xhyve
      • OS X操作系统Hypervisor框架简介
      • 在OS X中部署xhyve
      • 在OS X中部署hyperkit
      • 在xhyve中运行RHEL/CentOS
      • 在xhyve中运行Debian/Ubuntu
      • 进入xhyve的docker虚拟机
    • Vagrant
      • 使用Vagrant部署开发测试环境
      • 使用Vagrant Package打包VirtualBox环境
      • 使用Vagrant部署kvm虚拟化(libVirt)
      • Vagrant Box管理
      • 使用Vagrant Snapshot创建快照备份
      • vagrant up下载镜像失败无法断点续传处理
      • vboxsf模块安装和挂载共享目录
    • 杂项
      • 如何检测虚拟或物理主机
      • 轻量级虚拟化
  • IaaS
    • MAAS
      • Intel SGX安全隔离技术
    • Amazon
      • EC2
        • 如何ssh登陆AWS的EC2实例
    • Microsoft
      • Azure
        • 在Azure上创建Linux虚拟机
    • Google
      • compute
    • Kubernetes
      • Kubernetes设计架构
      • Kubernetes快速起步
        • Hello Minikube
        • 检查kubernetes版本
      • Kubernetes故障排查
        • 排查Kubernetes集群容器重启原因
    • DC/OS
    • OpenStack
      • DevStack
        • DevStack开发环境
      • 安装指南
        • 环境
          • 安全
          • 主机网络
          • 网络时间协议
          • OpenStack软件包
          • SQL数据库
          • 消息队列
          • Memcached
      • Red Hat OpenStack
        • 架构
          • 组件
          • 架构案例
      • 华为OpenStack
    • oVirt
      • oVirt架构
      • oVirt存储管理
      • 部署oVirt
      • oVirt升级
      • oVirt的VNC密码设置
    • 腾讯云
      • 云API SDK
        • 腾讯云Python API SDK快速起步
    • 云存储
      • Dropbox
        • 在墙内如何使用Dropbox
  • 监控
    • IaaS类监控
      • skinken
      • sensu
  • 性能
    • web
      • Progressive JPEG
    • 网络
      • 网络性能优化
      • 网络工具
        • ping检查网络连通性
        • tcpreplay - 网络流量编辑和重放工具
        • netperf网络带宽测试
        • iperf网络测试
        • 使用iperf3测试网络带宽
        • ping时间戳
        • 使用sar显示网络流量
      • 网络故障排查
        • "IO error: Broken Pipe"是什么意思
    • 云计算
      • PerfKit Benchmarker
        • PerfKit Benchmaker快速起步
        • 配置PerfKit Benchmarker
        • PerfKit Benchmarker增加新的云服务商
        • 谷歌云gcp
        • 微软云azure
          • Azure起步
        • 腾讯云qcloud
          • QcloudApi起步
    • 实用工具
      • fio存储性能测试
        • fio快速起步
          • fio指南
            • fio编译和安装
      • iostat
      • tsar
      • linpack
      • dd测试磁盘性能
      • 通过sheel计算pi测试CPU性能
      • Unixbench性能测试工具
      • sysbench性能测试工具
      • SPEC CPU测试CPU性能
  • 开发
    • C
      • 编译
        • make程序时ld报错的DEBUG方法
        • gcc编译显示"cc1: warnings being treated as errors"处理方法
        • c语言中的单行注释和多行注释方法
        • 编译c程序调用Python
      • 网络
        • HTTP
          • 使用C实现一个简单的HTTP POST并处理相应
      • 打印输出
        • 重定向printf()到文件
    • Swift
      • 在Linux上安装swift 3
      • Swift服务器开发
    • Java
      • java的胡思乱想(白日梦)
        • [Java简单案例]](develop/java/java_daydream/java_simple_example.md)
        • Java输入输出
        • Java循环
        • Java数组
        • Java面向对象编程
      • 快速起步的一个例子:猜数字
      • jshell
      • groovy
        • 安装groovy
        • groovy简单语法
        • groovy字符串分隔
        • groovy时间处理
        • groovy对象比较
      • Java Trouble Shoot
        • Druid连接池"druid.pool.GetConnectionTimeoutException"
    • Go
      • Fedora环境下Go快速起步
      • macOS环境下Go快速起步
      • Go起步
      • Go测试库testify
    • iOS
      • iPhone 3GS:十年后经典再现
      • iOS6拟物化
      • iPhone 4S越狱、降级和其他
      • 新安装App提示"Verification Required"的解决
      • USIM卡
    • Android
      • 学习Android开发
        • Android应用是如何编译和运行的
        • Android开发环境
        • adb(Android Debug Bridge)和Android数据存储
        • 在Android模拟器上运行应用
        • 离线(手工)安装Android System Image
        • 配置Android模拟器使用硬件加速
      • Android起步
        • Android One和Android Go
        • Nexus 5系统升级
        • Root Android(Nexus 5)
        • Android文件传输
        • Android文件管理和apk安装
        • Android文件系统读写挂载
        • Android截屏和录屏
        • 在Google Play购买软件
        • Android开发环境准备
        • Jetbrains Idea快捷键
        • Gentoo Linux安装idea Jetbrains开发环境
        • 在Nexus上安装Android 7 Nougat
        • 在Nexus 6P上安装LineageOS 15.1
        • Nexus 6P工厂镜像恢复
        • Nexus 6P通过Full OTA镜像恢复
        • 修复Nexus 6P无限循环重启
        • 安装Elemental X内核
        • 使用MultiROM在Nexus 5上安装多操作系统
      • LineageOS
        • 构建hammerhead(Nexus 5)的LineageOS ROM
        • 构建marlin(Pixel XL)的LineageOS ROM
        • 在hammerhead(Nexus 5)上安装LineageOS
        • 在hammerhead(Nexus 5)构建Android Go
      • 我的Android设备
        • Nokia中端高可玩X7
        • Nexus 6P
        • 真正原生Android: Pixel系列
        • Pixel设置VoLTE
      • Android和Linux合体
        • 在Android中运行Linux
        • 在Android中部署ssh服务
        • 在Android上部署Linux开发环境
        • 容器模式在Linux中安装和运行Android Apps(APKs)
        • Anbox - 运行在Linux中的Android容器
          • 在Anbox容器中运行Android程序
      • BlueTooth
        • 通过蓝牙共享网络
      • NFC近场通讯
        • NFC技术概览
        • 日常生活NFC使用介绍
        • NFC开发基础
    • Raspberry Pi
      • 树莓派快速起步
      • 树莓派计算模块
      • 从USB存储启动树莓派
      • 树莓派4的USB接口问题汇总
      • 树莓派视频输出配置
      • 树莓派作为Cisco Console服务器
      • 树莓派Zero设置USB网络通讯(Ethernet Gadget)
      • 在树莓派Zero W上运行Kali Linux
    • Ubuntu Touch
      • 在Nexus 5上安装Ubuntu Touch系统
      • Ubuntu Touch使用tips
      • Ubuntu Touch手机设置802.1x无线网络
      • Ubuntu Touch运行sshd服务
      • Ubuntu Touch设置网络Proxy方法
      • 在Ubuntu Touch中运行Android程序
    • BlackBerry
      • 黑莓bb10系统运行微信
    • Meego和Sailfish
      • sfdroid:Sailfish/Android合体
      • sailfish和meego系统的第三方软件仓库
    • WebOS
      • Palm Veer共享移动internet
    • Python
      • Python开发风格
        • 开源Python项目结构
      • Python快速起步
        • pip包管理
        • 在古老的CentOS 5上安装Python 2.7以及virtualenv环境
        • 在CentOS 6上安装Python 2.7以及virtualenv环境
        • 在CentOS 7上安装Python 2.7以及virtualenv环境
        • Ubuntu环境安装virualenv和virtualenvwrapper
        • 在CentOS上安装Python3和virtualenv环境
        • 在macOS上安装Python3和virtualenv环境
        • 重建Python的virtualenv环境
        • pip升级Python软件包
        • 激活python解释器的自动完成功能
        • init.py文件
        • python编程风格
        • python中文本编码
        • 检查python对象类型
        • python处理文本
        • python中main函数作用
        • python日志
        • python日期
        • python变量写文件
        • python同时读取2个文件
        • python列表
        • python数组
        • python字典
        • Python的map函数
        • lambda语法糖:无需定义函数名的简便方法
        • python过滤字符
        • python百分比
        • python三元运算
        • python创建其他用户可写文件
        • python清空文件内容
        • python删除文件中某行
        • python列表字符串转浮点数
        • python多层嵌套字典KeyError
        • "PEP 8(E731): do not assign a lambda expression, use a def"
        • python的模块和包
        • python获取系统cpu数量
        • python nohup后台运行进程
        • 使用Graphviz模块绘制图形
        • python字典内容添加到列表
        • python site-packages简介
        • python去除字符串换行
        • Python程序Daemon化
        • Python函数返回多个值
        • Python执行外部命令subprocess
        • Python实现case/switch
        • Python使用环境变量
        • 将JSON字符串转换成Python字典
        • 本地变量分配前被引用报错"local variable 'XXX' referenced before assignment"
        • Python中对应于'null'的是什么?
        • 在Python分割字符串
        • 在Python中检查字符串是否被包含在另一个字符串中
        • 在Python中执行命令的利器"subprocess"
        • Python日志功能
        • Python处理XML
        • 安装阿里云对象存储OSS Python SDK和osscmd
        • 阿里云日志服务SLS python SDK和CLI
      • Python网络编程
        • Python WEB编程
          • 创建URL查询字符串
      • Python日志处理
        • Python日志基础
        • 在python日志中使用轮转和压缩
        • python处理systemd journal日志
      • Python文件系统
        • Python's Watchdog模块实现文件系统变化触发操作
      • Python网络开发模块Twisted
        • Twisted起步和FTP实现
      • Flask开发Web
        • 安装Flask开发环境
        • 基于Flask的Dashboard - Dash
      • DJongo开发Web
        • Django快速起步
          • 快速安装Django
          • Django项目代码架构风格
          • 使用MySQL作为Django数据库
          • 设置django的允许主机
          • 第一个Django应用
          • 离线安装Django
          • 完整uninstall一个Django app
          • 'module' object has no attribute 'views'
          • 使用django-tables2展示HTML表
          • django特定model保存记录时触发动作
          • django前端案例--Portal
          • django过滤当天发生事件
          • django实现select count(*) group by和order by
          • django缓存
        • Django DEBUG
          • "UnicodeDecodeError: 'ascii' codec can't decode byte"
        • 轻量级Django
          • Hello World
        • Django REST framework
          • Django REST framework概述
          • Django REST framework快速起步
          • 修改Django REST framework的默认title
          • Django REST framework序列化
          • Django REST framwork过滤
          • django REST Framework的时区,视图和模型刷新debug
        • Django Dashboard案例
          • 结合d3.js/reactive.js/leaflet实现Django Dashboard
        • django-dash控制台(废弃)
          • 本地运行django-dash demo
          • 使用django-dash快速构建控制台
        • 安装Django测试驱动开发环境
        • TTD(测试驱动):开发环境第一个测试
        • TTD(测试驱动):使用单元测试测试简单首页
      • Python学习案例
        • youtuble-dl下载视频网站内容
    • Ruby
      • Ruby快速起步
        • Fedora环境下Ruby快速起步
        • RubyGems安装和使用
    • JavaScript
      • jQuery
      • D3.js数据可视化
    • Node.js
      • Node.js快速起步
        • Node.js开发环境准备
        • Fedora环境下Node.js快速起步
        • Node.js开发WEB框架
        • 在Mac OS X下卸载Node.js
      • npm包管理
        • npm使用tips
        • svg2png
    • 浏览器
      • Firefox
        • 设置Firefox默认页面缩放比例zoom
        • Firefox的Dark风格设置(styelish)
        • Firefox自动代理切换
      • Chrome
        • 设置Chrome代理
      • Min
    • PHP
      • Nginx php-fpm配置优化Tips
    • Mac
      • 在mac上从iso镜像创建启动U盘
      • 从macOS Recovery中重新安装macOS
      • 从Time Machine备份中恢复Mac数据
      • 检测Time Machine备份的Mac OS X版本
      • 降级macOS
      • 在VMware虚拟机中运行Mavericks
      • 中文输入法
      • macOS内建的文本朗读(英语)
      • Mac平台使用VLC播放器的中文字幕显示
      • Mac平台最佳视频播放器iina
      • TextMate 2使用Tips
      • Sublime 3使用Tips
      • 在Mac OS X上安装Java多个版本
      • 使用MacBook键盘在移动设备输入
      • Mac网络
      • macOS上使用ftp
      • 从safari中导出打开的tab
      • bird进程
      • 在Mac上双启动方式安装Linux
      • 创建macOS启动安装U盘
      • 在Mac上使用Boot Camp Assistant安装Windows 10
      • rEFInd工具详解
      • 加速Time Machine备份速度
      • 在mac上输入特殊字符
      • Mac锁屏
      • Mac吸入式光驱强制弹出光盘
      • 为旧主机选择最快的Mac OS X版本
      • 通过Reset NVRAM来恢复触控板
      • Apple文件系统apfs
      • 苹果充电器指示灯闪烁无法充电
      • 通过SSHFS在Mac上远程开发Linux服务器程序
      • 在macOS上安装配置vsftpd
      • 清理macOS上的Purgeable磁盘空间
      • 调整macOS的apfs容器空间
      • 调整APFS文件系统出现"APFS Container Resize error code is 49153"
      • Mac OS X挂载NFS共享
      • MacOS快捷键
      • 从Time Machine中恢复隐藏文件
      • iTerm2中文显示问题处理
      • iTerm2黑暗模式
      • 安装使用GNU sed
      • 具有BouchBar的新款MacBook和Linux
      • 在Mac OS X中通过CLI命令行获取CPU信息
      • 不能运行"not from a verified developer"程序
      • Mac OS X Mavericks和iOS 6组合(体验最后的拟物化苹果生态)
      • 将iPad作为Mac的第二块屏幕(sidecar)
      • MacBook Pro 2018使用外接显示器
      • macOS安装冻结问题处理
      • macOS的磁盘工具First Aid功能
      • 查找macOS的IP地址
      • 升级macOS之后运行程序报错"missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcru"
      • 在Mac上使用checksum校验文件
    • shell
      • bash
        • bash快捷键
        • shell的特殊变量
        • 判断shell变量是否空字符串
        • 字符串比较错误提示"unary operator expected"
        • shell脚本中使用source和使用./cmd.sh区别
        • here document用法(cat << EOF)
        • 根据命令返回结果做if判断
        • 使用sudo在文件中添加内容
        • shell中的环境变量
        • shell函数tips
        • 生成随机数和随机字符串
        • shell中使用数组
        • shell中读取文件到bash数组
        • 列出所有cron定时任务
        • 在shell中计算
        • 在bash计算
        • shell中的break和continue指令
        • 读取文件逐行处理元素
        • 两个文件相减
        • 在shell中使用while循环
        • 在while循环中执行ssh中断循环的解决方法
        • shell中调用函数返回值的方法
        • shift的用法
        • 移除换行
        • 删除字符串最后n个字符
        • 删除一个文件的最后一行
        • 替换多个空格成为一个空格
        • ``符号和脚本进程
        • 同时赋值给多个变量
        • 在shell中比较小数的大小
        • sudo执行bash脚本报错"sudo: unable to execute"
        • 获取字符串最后几个字母
        • 对比目录文件异同
        • 文件对比
        • 判断字符串包含关系的方法
        • 检查字符串长度
        • "exec"指令的含义
        • 从函数返回
        • 检查变量是否是一个数值
        • shell中判断字符串null值
        • 删除文件名中包含"--"的文件
        • 使用nohup执行while循环
        • 修改nohup命令默认输出文件名"nohup.out"
        • 通过SSH远程写入文件
        • ping测试记录时间戳
        • 软链接和文件名
        • shell中字符串大写和小写转换
        • shell中处理json数据工具jq
        • shell检查主机是否alive
        • shell中检查服务器进程使用cpu
        • 获取网卡IP地址
        • 高效清理文件系统大量文件的方法
        • 找出系统端口监听服务进程
        • 判断文件是否为空
        • 执行rm,cp,mv命令出现"Argument list too long"报错的解决方法
        • 切分字符串赋值给多个变量
        • 计算字符串长度(字符数量)
        • 删除字符串的最后字符
        • 补全字符串
        • 检查数字是偶数还是奇数
        • 转换Linux uptime时间到易于理解的格式
      • zsh
        • oh-my-zsh
      • sed和awk
        • awk和shell之间的变量传递
        • 打印列中包含某个字符串的列
        • awk处理字符串搜索
        • sed举例
        • 如何避免sed -i破坏文件的软链接
        • sed替换行首和行尾
        • 使用sed修改配置文件到键值
        • Mac平台sed命令使用-i参数失败及解决方法
        • 删除文件的首行和尾行
        • 删除文件的最后一列
        • 累加所有行的每一列数值
      • 实用工具
        • sudo切换账号运行程序
        • 修改用户帐号名/uid/gid的工具usermod和groupmod
        • 脚本作为daemon运行
        • cut使用举例
        • sort排序
        • 对cpu施加负载
        • 多路复用终端管理器screen
        • 多路复用终端管理器"增强版"byobu
        • 随机输出文本文件中的行:shuf
        • 使用usermod禁用帐号
        • 使用tree展示目录结构树
        • 根据进程名pgrep和pkill
        • wget下载文件tips
        • HTTP协议利器curl
        • 命令执行超时检查工具timeout
        • 脚本使用ssh的密码认证工具sshpass
        • 并行执行ssh命令工具pssh
        • 命令输出处理工具xargs
        • 文件查找工具find
        • parallel利用多核CPU加速Linux命令
        • 命令速查表cheat
        • 语音合成工具espeak
        • 网络万能工具nc
        • 限制命令的io调度和权重
        • 配置修改工具augeas
        • 高效压缩工具xz
        • tar命令再认识
        • echo命令再认识
    • vim
      • vim快速起步
      • vim 跳转到函数、变量定义处
      • vim tips
      • vim树形导航插件NERDtree
      • vim编译配置"YouCompleteMe"
      • vim结合ctags作为开发平台
      • vim开发内核环境
      • 将Vim打造成Python开发平台
      • 使用vim作为c/c++ IDE
      • 使用vim作为c/c++ IDE(again)
      • 使用vim作为IDE
      • 在macOS平台使用vim作为IDE
      • vim大小写转换
      • 设置vim缩进和TAB
      • vim列编辑
      • vim并列视图编辑和查看同一文件(viewports)
      • 卸载macvim
    • 文档
      • dot
        • 使用Graphviz生成系统诊断图
      • GitBook
        • 使用GitBook撰写书籍
        • 如何在一台主机同时运行多个GitBook
        • GitBook评论插件
        • GitBook单章节展开插件
        • GitBook代码段添加文件名
        • GitBook多国语言
        • GitBook嵌入视频
      • MkDocs
        • 使用MkDocs撰写书籍
      • Hugo
        • 使用Hugo撰写文档
      • Hexo
        • 使用hexo撰写blog
        • 使用hexo theme tranquilpeak
      • Sphinx
        • 使用Sphinx构建Python程序文档
        • 使用Sphinx构建Django程序文档
        • sphinx中文文档在readthedocs编译PDF失败的处理
        • 结合plantuml使用sphinx撰写时序图文档
        • sphinx文档的代码展示
        • sphinx文档的footer定制
        • sphinx图片
        • 'redrawtime' exceeded, syntax highlighting disabled
      • MoinMoin
        • MoinMoin 2安装
        • MoinMoin 1安装
        • 配置Moin
        • Moin Themes
      • Office
        • 在Linux中使用Sozi制作PPT
        • Linux演示工具(PPT)
      • OmniGraffle
      • Sketch
    • 编程架构
      • 统一建模语言UML
        • 看懂UML类图和时序图
      • RESTful开发架构
        • RESTful简介
        • 理解RESTful架构
        • RESTful认证和权限机制浅析
    • 机械键盘
  • DevOps
    • 基础架构工程师视角的DevOps
    • 持续集成/交付/部署
      • 持续集成/交付/部署概述
    • Git
      • git代理配置
      • git分支的新建与合并
      • git的tag和branch
      • git pull覆盖本地文件(完全舍弃本地文件)
      • git合并时冲突放弃本地修改方法
      • git远程操作
      • git和dropbox冲突
      • 针对不同域名git push时使用指定SSH key
      • git忽略文件mode修改
      • git重新基于master开发分支
      • 合并多个commit
      • git色彩显示
      • 在不同git仓库代码使用不同用户名
      • [git合并冲突解决](devops/git/git _merge_fix_conflicts.md)
      • git checkout指定tag
      • 从git仓库中清理敏感信息(如密码))
      • git通过SSH Tunnel代理访问
      • git文件的执行属性
      • 修改git commit消息
    • Gerrit
    • Gitlab
      • 部署使用的ssh key
      • gitlab Wiki系统gollum
    • Gogs
    • Jenkins
    • Ansible
      • 起步
        • Ansible快速教程
        • 安装
        • 快速起步
        • 清单
        • 动态清单
        • Patterns
        • Ad-Hoc命令
      • Playbooks
        • Playbooks入门
        • 案例:升级CentOS操作系统
        • 案例:通过sudo安装rpm包
      • 模块
        • command - 在远程节点执行一个命令
        • shell - 在远程节点执行命令
      • Dashboard
        • Ansible Tower开源替代:semaphore
      • 问题排查
        • TAB键导致"Syntax Error while loading YAML"
        • paramiko主机认证报错
        • paramiko主机认证报错
        • playbook执行报错"requires the stdlib json or simplejson module"
      • Tips
        • Ansible模块shell,command
        • 如果软件包没有安装则执行命令
        • 不检查SSH主机fingerprint
        • 变量和引号
        • ansible性能优化
        • 使用ansible.cfg
        • 安装rpm报错"unfinished transactions remainin"
        • yum安装报错"Package XXX is not signed"
        • yum安装报错"No Package matching"
        • Ansible批量复制文件
    • Puppet
  • 大数据
    • Hadoop
      • 快速起步
        • 单机安装部署Hadoop
      • 故障排查
        • RHEL6环境下透明大页和Hadoop高CPU sys
    • Flink
      • flink流处理架构
    • Spark
      • 快速起步
        • 单机安装部署Spark
      • Spark机器学习
    • Elasticsearch
      • ESK简介
      • ESK快速安装
    • ZooKeeper
  • 机器学习
    • 斯坦福机器学习(CS229)
      • 机器学习介绍
      • 监督学习介绍
      • 无监督学习介绍
      • 单变量线性回归
      • 多变量线性回归
    • 单变量的线性回归
    • TensorFlow
      • 面向机器智能的TensorFlow
    • 机器翻译
      • moses
    • GPU计算
      • nVidia CUDA
      • AMD ROCm
    • Jetson Nano
      • vpi1-demos报错可忽略
  • 学习
    • 慕课(mooc)
      • 我的慕课
    • 天堂电影院
      • 使用VLC播放加密蓝光碟片
    • Kindle在,人未老
      • 重置Kindle Paperwhite
      • 使用calibre去除kindle DRM
      • 备份Kindle电子书
      • 电子书阅读软件
      • Kindle个人文档
      • 制作合适kindle的pdf:pdf切边和重排
      • 使用Kindle阅读pdf文档
    • GTD: Getting Things Done
  • 附录:个人工作室构建
    • MacBook双操作系统启动macOS+Linux
    • 使用Fedora作为开发平台
    • 无线网络设置
    • 帐号、ssh和sudo设置
    • 部署kvm虚拟化
    • 部署docker容器
    • 部署OpenStack
    • 远程开发Linux服务器程序
    • NFS设置和共享目录
    • Django开发设置
    • 部署Nginx+uwsgi运行Django
    • HAProxy端口转发
    • 使用wekan作为Trello类型的"看板"管理自己的工作
  • Who am I?
Powered by GitBook
On this page
  • 起因
  • 存储技术未来 - 数据删重和数据压缩

Was this helpful?

  1. 操作系统
  2. Linux
  3. 存储
  4. 文件系统

Linux文件系统的未来

Previous文件系统NextEXT文件系统

Last updated 5 years ago

Was this helpful?

起因

我整理和汇总这篇文档的原因是最近一次在Btrfs上运行KVM虚拟机的时候,会出现Btrfs报错csum failed,随后出现CPU超过限值:

[Tue Oct  1 23:44:37 2019] BTRFS warning (device sda4): csum failed root 257
 ino 293 off 15661608960 csum 0x445ced74 expected csum 0x2f7d82ec mirror 1
[Tue Oct  1 23:44:38 2019] BTRFS warning (device sda4): csum failed root 257
 ino 293 off 15661608960 csum 0x445ced74 expected csum 0x2f7d82ec mirror 1
...
[Tue Oct  1 23:44:47 2019] mce: CPU2: Core temperature above threshold, cpu 
clock throttled (total events = 73235)
[Tue Oct  1 23:44:47 2019] mce: CPU3: Core temperature above threshold, cpu 
clock throttled (total events = 73235)

此时 top 观察系统处理器use和sys都不高,还有较多idle,但是系统负载达到10+,超过了主机cpu个数,运行非常缓慢。强制杀掉VM后回复正常。

另外一个现象是在 /var/lib/libvirt/images 目录下压缩30G大小Windows镜像,压缩非常缓慢远超过1小时,并且压缩文件解压缩以后,Wiondows虚拟机运行时显示磁盘文件系统损坏,而且Windows自动修复重启guest,但显示无法找到启动磁盘。这意味着虚拟机镜像破坏。

对比配置,可以看到我在这次arch linux的实践配置btrfs和之前在Ubuntu 18.04上配置的差异是,arch linux上的btrfs启用了磁盘压缩功能,启用了zstd。这个压缩功能可能引入了不稳定的因素。

最近(2019年9月底),CentOS 8终于release,我惊讶发现,CentOS 8移除了btrfs文件系统支持。实际上,是上游 ,已经不能在RHEL 8/CentOS 8中创建和挂载Btrfs文件系统,,但这带来极大的维护成本(每次内核升级都需要自己维护版本)。

早在2017年phoronix新闻已经公布了Red Hat放弃btrfs,并且在介绍了Red Hat的(一种本地文件系统),结合XFS和device-mapper来实现类似ZFS的技术。当前的实现是采用用户空间daemon来管理:

当前支持Btrfs的主流发行版本是SUSE,企业级应用案例是FaceBook。相信FaceBook这样的体量能够在内部针对btrfs进行深度定制和bug修复,以便能够充分发挥其特定优势。实际上大厂都有这样的开发团队来维护开源软件的特定分支,针对其业务特殊性定制。

  • btrfs长期处于技术预览阶段,功能稳定性一直没有达到生产级别;与此同时,其他文件系统的进步和发展已经逐步具备了btrfs的功能,并且正确组合现有稳定的存储技术,如ext4, XFS, LVM等,就可以实现btrfs承诺的特性

  • 不能稳定支持RAID5/6(官方wiki也这样说明):

    • 对于大型公司(例如FaceBook)可能可以通过底层RAID硬件来弥补这个缺陷。

但是,随着现代化大型服务器使用的海量存储磁盘,如果发生磁盘故障,不论是软件RAID还是硬件RAID,底层RAID的同步复制会导致其他磁盘巨大的压力,由于同步时间周期极长,在同步期间,极有可能发生连锁的磁盘故障而导致数据丢失。

所以,在现代数据中心海量存储中,不建议使用RAID 5,而建议采用类似Ceph这样的分布式文件系统,将数据块部分分散到集群海量数量磁盘上,降低单磁盘故障风险。如果不得已要使用RAID,也至少要使用RAID6,推荐RAID10,并配置足够多的spare盘以便故障自动替换。

实际上,在Linux平台的文件系统中,ZFS由于较为完善地内建了RAID功能,所以比Btrfs有很大的优势。ZFS不需要底层RAID系统,直接控制单盘并实现RAID,可以较好地在文件系统层感知底层的硬件故障。所以,Red Hat的客户可能大多使用ZFS而不使用Btrfs,这样Red Hat抛弃Btrfs才能实行。

对于大型数据中心,Ceph分布式存储系统将数据块分散到海量服务器磁盘中,避免了硬件故障以及强制的整块故障硬盘数据复制(对数据修复的源、目的磁盘压力极大)。这也是当前大型集群的优选存储方案。并且Ceph已经发展成不需要底层文件系统,也是Red Hat主推的数据存储解决方案(Red Hat已经收购了Ceph)

  • 如果文件系统发起TRIM请求(discard丢弃),这个请求除了会转发给硬盘外,MD(即RAID)会记录一个或多个条代(strip)不再存储有用的信息(这个标志位会因为对条代的写入而失效)。在恢复过程中,进入每个条代的状态,MD只能处理RAID阵列的有效部分。

    • 对于大型TRIM请求,TRIM请求是块细粒度的。为了正确跟踪哪些条代有有效数据,MD需要为每个数据块记录这个数据块是否有有效数据。否则,就不能确定某些TRIM请求是否已经从条代中删除了最后使用的块。

以上对话似乎是表示MD对TRIM跟踪不利

  • Red Hat放弃支持Btrfs可能是为了迫使下游发行Oracle Linux的Oracle公司加强合作并投入资源推动Btrfs稳定进入RHEL。因为没有Red Hat上游支持,Oracle要投入更多资源才能在clone lnux中稳定运行Btrfs

  • Red Hat雇佣了大量的XFS开发人员,其内部主要的本地文件系统开发团队都围绕XFS进行,所以XFS是Red Hat主要支持技术

  • Red Hat擅长雇佣不知名的开源开发者并帮助其获得开源影响力;但Red Hat待遇比Facebook,Google等大厂要低。如果能在Red Hat公司中成长起来,往往能够得业界较好的职位。

  • XFS在数据库类型的高端应用上有较大性能优势(比EXT4性能要好),ZFS需要相应调整数据库参数,例如ZFS已经提供了保障就不需要开启InnoDB的双写缓存,此外还要条增数据库内存页大小,否则ZFS不能发挥良好的性能。

  • 需要结合LVM来使用ext4/xfs,否则不能获得类似ZFS的快照功能。

  • btrfs在创建或删除快照的时候影响存储性能:Btrfs不区分clone和snapshot,两者相同,并带有标志位。

    • 这种设计表面看起来简单方便,但是副作用是效率很低。

    • ZFS的快照归数据集所有,几乎没有刷新计数的开销,只是根据简单的交易ID编号将区块移动到deadlist。如果你修改了一个块,并且其事务ID大于最新快照,就以对其进行处理;否则就将其添加到快照deadlist(并添加新的更新块)。如果删除快照,则执行相同操作:对于每个块,如果块事务ID早于上一个快照的事务ID,则其丢弃,否则将其移至上一个快照的deadlist。除了减量处置外,没有其他变更。只有在创建clone时候ZFS才有开销,所以ZFS快照非常轻松。

    • 但是Btrfs的快照则代价高昂。

  • ZFS具有细粒度的权限委派体系,这个体系通过数据集关系而不是功能继承。

  • XFS缺乏透明压缩功能,这个功能可能在MD层面可以实现?

  • 本地文件系统通常采用服务器内建的SATA和SAS磁盘,也包含通过SAN连接的存储(因为SAN输出的设备是不共享的)

  • 早期RHEL 4/5主要使用Ext2和Ext3文件系统,从RHEL 5.6开始全面支持Ext4

  • XFS是64位日志型文件系统,支持单机运行及非常巨大的文件,从RHEL 7开始成为默认文件系统

  • XFS是1990年代由SGI开发,经过漫长的发展已经成为成熟稳定的文件系统并提供了丰富的特性:

    • 延迟分配

    • 动态分配inode

    • B叉树索引支持空闲空间管理的伸缩性

    • 支持大量并发操作

    • 充分的运行时元数据一致性检查

    • 精巧的元数据预读算法

    • 稳定集成的备份和回复工具

    • 在线碎片整理

    • 在线文件系统扩展

    • 全面的诊断能力

    • 可伸缩和快速的修复工具

    • 针对流视频工作负载的优化

  • Ext4是RHEL 6的默认文件系统,支持特性:

    • 扩展元数据

    • 延迟分配

    • 日志教研

    • 支持大型存储

  • 选择文件系统的建议:

    • 根据操作系统版本的推荐默认文件系统选择

    • Ext3/Ext4文件系统在有限的带宽(<200MB/s)和最多1000IOPS环境下性能较好;对于更高压力和性能要求,则适合使用XFS。

    • XFS比Ext3/Ext4每个元数据操作消耗2倍的CPU,所以需要更多处理器资源:如果CPU负载能力有限,则Ext3/Ext4性能更好。总之,如果应用使用一个单一的读/写线程并且是小文件则Ext3或Ext4更合适;而XFS适合多线程读写和较大文件的应用程序。

  • RHEL 6开始较好支持了SSD trim,并且自动检测和对齐文件系统。

  • 共享型网络文件系统

    • RHEL 6之前提供了GFS1,RHEL 6开始采用GFS2,最高支持16个节点。

存储技术未来 - 数据删重和数据压缩

,有用户和Red Hat工程师讨论,主要的观点有:

基于上述理由,Red Hat推出了结合XFS和LVM的存储管理解决方案,目前已经释出1.0版本,实现了阶段性目标。在RHEL 8中,已经包含了Stratis存储解决方案,并且被标记为"Technology Preview"。

从 2017 年LWN讨论 提到了btrfs的一些缺陷:

anton用户提供信息信息介绍Btrfs组建RAID1遇到bug导致一块磁盘fail并进入只读文件系统模式,通过复制进行恢复,但没有丢失数据。

在Haker News上有关讨论:

XFS最新支持了CoW功能 - 见 ,即 RHEL 8默认激活XFS的CoW功能,这个功能的工具支持从xfsprogs的4.17.0-2.el8开始。

Rad Hat有一篇技术介绍文档 :

XFS已经被验证可以支持极高的企业级伏在,也能够在多线程、并发I/O负载下良好工作;但是XFS在单线程、元数据密负载环境下性能不佳:例如,在单线程情况下创建或删除大量的小文件。详细有关文件系统、文件和目录的限制,请参考 文档的File systems and storage章节。

这意味着企业级数据存储需要有效的存储增强技术。

why redhat abandon btrfs where SUSE makes it default.?
Stratis项目
Btrfs has been deprecated?
BTRFS and RAID1
Btrfs has been deprecated in RHEL
XFS now supports shared copy-on-write data extents
How to Choose Your Red Hat Enterprise Linux File System
Red Hat Enterprise Linux technology capabilities and limits
Red Hat 2017年收购了提供重复数据删除和数据压缩技术公司Permabit Technology Corporation
Red Hat Enterprise Linux 8终止了btrfs支持
除非你自己编译内核支持btrfs并编译安装btrfs工具
Red Hat Appears To Be Abandoning Their Btrfs Hopes
Stratis Is Red Hat's Plan For Next-Gen Linux Storage Without Btrfs
Stratis项目
stratis架构