IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

DevOps

共 871 篇文章

IT 2014-12-01 23:51:11 / 累计浏览 2,961

EXT文件系统误删除数据恢复指南

这篇讲的是Linux运维中一个让人头疼的常见问题:使用EXT文件系统的服务器上误删了重要文件,该怎么办? 作者直入主题,没有冗长的背景铺垫,而是直接切入两种最关键的自救场景。第一种情况是“虚惊一场”——文件虽然被rm命令删除了,但只要某个进程(比如正在写日志的tail)还持有该文件的句柄,就有办法“复活”。文章详细演示了如何通过/proc这个伪文件系统,定位到进程的文件描述符,然后直接将数据拷贝出来。这里的诀窍在于理解Linux内核“延迟释放”的特性。 第二种情况则更为棘手:文件已被彻底删除,进程也已退出。此时,作者推荐了extundelete这个针对EXT3/EXT4的专用工具。文章像一份操作手册,从关键的第一步“umount分区以防数据被覆盖”,到安装、使用工具扫描并恢复被删目录,步骤清晰。特别强调了在进行任何恢复操作前,使用dd命令对整个磁盘分区做镜像备份的必要性,这是避免二次损坏的最后防线。 整篇文章的价值在于其极强的实操性。它没有空谈理论,而是用具体的命令行和输出结果,为处于慌乱中的技术人员指明了两条清晰、可行的恢复路径。对于管理Linux系统的工程师来说,这篇文章更像是一份值得收藏的应急手册。

本机暂存
IT 2014-11-30 23:28:07 / 累计浏览 3,058

实用命令行工具详解(五)—crontab

这篇讲的是Linux系统里“定时任务”的核心工具——crontab。文章从crontab的基础概念和命令格式讲起,比如常见的-l(查看)、-e(编辑)、-r(删除)等操作。 但真正的干货在后半部分的应用实例。作者没有停留在理论,而是直接给出了大量贴近实战的crontab写法,从“每晚21:30重启Apache”到“每周一到周五下午5点发邮件”,覆盖了日常运维和开发中高频出现的定时需求。特别是对时间字段(分、时、日、月、周)的各种灵活组合进行了拆解,例如“0 23-7/2,8 * * *”这种稍显复杂的表达式,都附有清晰的说明。 通过这些具体例子,文章把抽象的cron表达式变得具体可见,非常适合需要快速查阅或学习如何编写定时任务的读者。

本机暂存
IT 2014-11-30 23:27:39 / 累计浏览 2,320

实用命令行工具详解(四)—netcat

这篇讲的是Linux下的网络调试利器netcat(简称nc),它被称作“网络工具中的瑞士军刀”,能通过TCP和UDP在网络中读写数据。文章具体拆解了它的三个实用场景:建立监听端口进行基础通信、利用管道实现文件快速传输,以及通过-w参数设置连接超时以控制会话时长。每个场景都提供了清晰的客户端与服务器端命令示例,比如用`cat local | nc localhost 9999`来推送文件内容,或用`nc -w 10`来自动中断空闲连接。这些例子展示了如何将netcat与重定向、管道结合,在脚本或临时调试中灵活使用。

本机暂存
IT 2014-11-30 23:27:11 / 累计浏览 2,594

实用命令行工具详解(三)—ngrep

这篇文章介绍的是一个实用的网络抓包工具——ngrep。当httpclient请求出现线上问题却难以直接调试时,ngrep提供了一种轻量、高效的抓包分析方案。 与经典的tcpdump相比,ngrep更像是网络版的grep。它聚焦于“搜索”特定数据包内容这一核心功能,依赖libpcap库,能识别TCP、UDP等主流协议。对于开发者而言,它的最大优势在于简单直接:可以用类正则表达式直接匹配数据包中的文本内容。 文章通过一个捕获HTTP POST请求的实例,展示了ngrep的典型用法。例如,使用`sudo ngrep -q -W byline "(POST).*"`命令,就能快速过滤出所有POST请求,并清晰显示其完整的Header和Body内容,这对分析接口调用问题非常直观。文中还详细解读了各个参数,如`-q`静默模式、`-W byline`格式化显示、`-d`指定网卡等,帮助读者按需组合,精准定位问题流量。 总的来说,ngrep将强大的grep理念带入了网络诊断领域。对于需要在线上环境快速排查HTTP请求异常、进行轻量级协议分析的场景,它是一个上手快、效率高的得力工具。

本机暂存
IT 2014-11-30 23:26:11 / 累计浏览 2,071

实用命令行工具详解(二)—siege

这篇讲的是Linux下的负载测试工具siege如何模拟真实用户行为。文章开篇就点明了它与Apache ab的关键区别:siege能从URL列表随机请求,更适合仿真多用户并发负载,而ab则在追求极致性能基准时更精确。 文章详细展示了siege的多种实战用法。比如,你可以用 `siege -c 500 -r 50 -f url.txt` 模拟500个用户重复请求50次;也可以用 `-t10M` 参数让压测持续10分钟。它甚至能从服务器的access.log中提取URL,用来复现历史访问场景,这对于重现问题非常实用。 对于测试结果,文章逐一解读了输出指标,像“Transaction rate”即我们常说的QPS,“Response time”反映网络连接速度。最后部分还梳理了关键参数,如 `-c` 控制并发量、`-d` 设置请求间隔、`-l` 保存日志等,帮助读者根据自身环境灵活配置。 整体上,这篇文章没有停留在理论介绍,而是通过具体命令和输出示例,手把手地带读者用起来。对于需要快速评估Web应用压力承受能力的开发者来说,这是一份清晰的速查手册。

本机暂存
IT 2014-11-30 23:22:44 / 累计浏览 1,973

基于DRBD的高可用NFS解决方案分析

这篇讲的是如何用 DRBD 和 NFS 搭建高可用文件共享方案的一次实践与踩坑。作者从分析 NFS 协议(特别是 NFSv4 对迁移和故障恢复的定义)出发,设计了一个方案:底层用 DRBD 实时镜像块设备,在其上建立文件系统,再通过 NFS 共享,期望在主机故障时能实现业务无感知的切换。 按照这个思路,作者搭建了测试环境,模拟在线业务时进行 DRBD 倒换、NFS 重启和 IP 漂移。理论上,NFS 协议的“grace time”机制应该能处理服务端重启,让客户端用旧的文件句柄重新连接时依然能定位文件。 但实际测试结果是:客户端报出“NFS句柄无效”的错误。作者分析指出,关键问题在于 DRBD 镜像的块设备在两台主机上各自挂载后,生成的 inode 分配并不一致。尽管文件系统数据完全一样,但 NFS 服务端是通过宿主文件系统看到共享目录的,当发生切换后,对端无法正确解析客户端原有的、基于旧 inode 信息构造的文件句柄,导致访问失败。文章最后也坦诚了验证未能完全成功,并提出了后续可以从 NFS 源码层面探索直接共享 DRBD 设备内容的思路。

本机暂存
IT 2014-11-28 23:11:42 / 累计浏览 4,634

存储基础知识之——磁盘阵列原理及操作实战

这篇文章从磁盘阵列的物理结构讲起,重点拆解了Linux环境下逻辑卷管理(LVM)的核心概念与实操流程。作者先用通俗比喻厘清了LUN(逻辑单元号)在SCSI寻址体系中的扩展作用,随后将LVM的三个关键层次——物理卷(PV)、卷组(VG)、逻辑卷(LV)——逐一剖析。文章没有停留在理论定义,而是直接进入实战环节:从用fdisk修改分区格式为LVM专用的8e开始,依次演示了如何初始化PV、创建并激活VG、以及最终在VG上创建LV的完整命令链。其中还穿插了管理场景的处理,比如如何为现有VG扩容、安全移除PV等。对于需要灵活调配存储资源的运维或开发人员,这篇文章把从硬件到逻辑层的概念关联和操作路径理得比较清晰,尤其适合想理解LVM实际用途的读者。

本机暂存
IT 2014-11-28 22:15:21 / 累计浏览 2,766

误删大文件的一个可能解救办法

这篇讲的是作者在服务器上误删一个10GB大文件后,如何利用Linux文件系统特性紧急抢救的过程。 当时作者正在对镜像文件计算md5校验和,另一个窗口误操作执行了rm删除。好在大文件删除需要时间,作者迅速暂停了md5sum进程。关键点在于:Linux系统中,只要还有进程打开并占用着这个文件,即便已执行rm命令,文件数据也不会被立即清除。 通过查看被暂停进程(PID 30888)在/proc文件系统中的文件描述符,作者找到了那个指向“已删除”文件的链接(/proc/30888/fd/3)。最后用简单的cp命令,就成功将文件内容复制出来保存为save.img,完成了数据恢复。 文章还补充道,对于文本文件可以用grep尝试恢复,而exe、图片等二进制文件则可借助TestDisk、PhotoRec等专业工具。整个过程清晰地展示了Linux文件删除的底层逻辑和一个实用的应急技巧。

本机暂存
IT 2014-11-28 22:06:21 / 累计浏览 3,326

使用tar+lz4/pigz+ssh更快的数据传输

这篇讲的是,如何通过压缩管道来突破服务器间大文件传输的速度瓶颈。作者在之前优化SCP速度的基础上,进一步测试了结合不同压缩算法与SSH的方案。 核心对比了lz4与pigz这两种高速压缩工具。在“打包-压缩-传输-解压-拆包”这一完整流程中,解压速度是最大的性能短板。lz4虽然在压缩率上略逊于pigz,但其解压速度达到了惊人的264MB/s,是gunzip的三倍,这使它在需要即时解压的传输场景中成为关键。 实测结果显示,使用 `tar | lz4 -B4 | ssh` 的组合,传输速度从原始SCP的约40MB/s提升到了249MB/s。这意味着原本需要3小时的400GB数据迁移,现在仅需27分钟。文章不仅给出了最终可用的命令行方案,还分析了磁盘IO、网络带宽及管道开销等各环节的实际表现,并发现了调整lz4块大小(-B4)能对性能产生显著影响。对于运维和开发人员来说,这是一个非常实用且经过验证的加速技巧。

本机暂存
IT 2014-11-27 12:59:32 / 累计浏览 3,798

服务器运维:怎样优雅地切割log

这篇讲的是如何优雅地处理服务器日志切割的问题。作者从运维人员常遇到的困境出发,先吐槽了手动移动日志文件的粗暴方式及其风险,接着介绍了写空日志的改良方法,最终引出真正的解决方案——专用的logrotate工具。 文章的核心在于,它不仅推荐了工具,更结合实际生产环境给出了配置思路。作者指出,简单的每日切割在高流量场景下会暴露新问题,比如压缩大量日志时可能瞬间占满CPU,影响服务响应。因此,他提出了一系列具体的优化建议:预估日志产生量、规划存储周期、谨慎评估是否压缩,并在必须压缩时,可以使用taskset和nice指令来分配CPU资源,避免影响业务进程。此外,针对单日志文件过大的情况,文章也提出了按大小或按小时切割的策略。 整篇文章用平实的语言,将日志管理从“能用”提升到了“好用且稳健”的层面,给出了从工具选择到参数调优的完整思考路径。

本机暂存
IT 2014-11-26 23:04:19 / 累计浏览 1,777

yunbk-让备份变得更简单

还在为数据库和文件备份的手动操作感到繁琐吗?作者用 Python 开发了 yunbk 这个简洁的备份插件,让数据备份变得像写几行代码一样简单。它的核心思路是通过一个统一的 `with` 上下文管理器,在临时目录中完成所有备份文件的写入,调用 `backup()` 后便自动上传至配置的后端存储,最后彻底清理现场,不留痕迹。 这个插件最大的优点是灵活性和易用性。通过提供本地、FTP、阿里 OSS 等多种后端适配器,开发者可以轻松地将 MySQL、Redis 等数据库,或是任意媒体目录备份到不同位置。文章中给出了几个清晰的代码示例,比如仅需几行就能完成 MySQL 全库的本地备份。作者还推荐结合 APScheduler 实现定时自动化备份,给出了一个完整的调度脚本,让整个备份方案更加实用和落地。

本机暂存
IT 2014-11-26 22:57:18 / 累计浏览 3,945

如何对待开发团队中那个拖后腿的人?

这篇讲的是团队中相对弱势的成员如何成为检验团队文化健康度的试金石。作者从自己多年参与不同团队的经历出发,分享了一个观察:优秀的开发团队往往都有一个“垫底”的成员,但关键不在于这个人的能力短板,而在于团队其他人如何对待他。 文章用了一个生动的例子——在作者曾参与的志愿者团队中,有个叫Elliot的成员。他热心却总是把事情搞砸,没人会把关键任务交给他,但所有人都体谅他,帮他融入并贡献自己的力量。团队会私下叹气,但绝不容许外人欺负他。作者指出,这种相互尊重与包容的氛围,恰恰是团队和谐与高效的标志。 相反,在不和谐的团队中,类似的成员容易被孤立和轻视,这会带来负面影响。文章认为,如何对待团队里“那个Elliot”,直接反映了团队的文化与领导力。商业组织和开源社区都能从中获得启发:关注成员间的互动方式,有时比单纯追求个人技术能力更能决定一个团队的长期健康与凝聚力。

本机暂存
IT 2014-11-26 22:45:01 / 累计浏览 2,576

用 LEK 组合处理 Nginx 访问日志

这篇讲的是作者在使用 Logstash 处理 Tengine/Nginx 通过 syslog 发送的访问日志时,遇到的几个实际性能瓶颈及优化方案。文章首先指出,在高压力下 Logstash 的 Grok 插件容易成为瓶颈,因此作者建议在日志格式可控时,优先考虑用分隔符格式配合 Ruby 脚本或自定义 LogFormat 来替代 Grok 解析。 然而真正的坑在后面:运行后发现日志接收带宽异常低,排查发现是 Logstash 的 syslog input 插件采用了单线程 UDP 监听,导致接收队列(Recv-Q)持续堆积。作者对比了 Fluentd 的异步实现,并考虑到 Logstash 基于 JRuby 的扩展复杂性,最终选择了一个更直接的方案:用 Perl 的高性能 AnyEvent 库重写了一个专门的异步日志收集脚本。这个脚本同样将日志输出为 Elasticsearch 兼容格式,使得原有的 Kibana 仪表盘无需任何改动。最终效果立竿见影,日志接收带宽从瓶颈时的 60 MBps 恢复到了正常的 300 MBps。

本机暂存
IT 2014-11-25 23:13:16 / 累计浏览 2,357

core dump磁盘报警问题排查过程

这篇讲的是线上服务器磁盘突然报警的排查过程。作者从玩客项目一台机器分区占用超80%的告警入手,发现同批次其他机器都正常。 通过 `find` 命令查找大于100M的文件,发现大量 `core.数字` 格式的文件,锁定了磁盘占用的元凶——core dump文件堆积。进一步用 `gdb` 分析其中一个core文件,明确是 php-fpm 进程(pool www)产生的崩溃转储。 问题根因在于系统的 `core file size` 限制被设为 `unlimited`。通过检查 `/etc/security/limits.conf`,确实存在 `* soft core unlimited` 和 `* hard core unlimited` 的配置,导致php-fpm崩溃时会无限制地生成core dump文件。作者注释掉相关配置并重启php-fpm后,成功将core file size soft limit置为0,从源头禁止了生成。最后删除已有的core文件,将磁盘占用降至50%左右。 一个实用的细节是,文章结尾提醒,有时即便在 `limits.conf` 中看到core设为unlimited,但通过 `ulimit -a` 查看实际生效的可能仍是0,排查时需注意。

本机暂存
IT 2014-11-25 23:08:47 / 累计浏览 4,376

OS X 支持 NTFS 读写

这篇讲的是如何用系统原生的方式,让 Mac 对 NTFS 格式的硬盘支持读写功能。作者从一个常见情况切入:明明 OS X 内核支持 NTFS 读写,但系统默认却只以只读模式挂载,导致很多用户需要借助第三方软件才能向 NTFS 分区写入数据。 文章的核心方案是直接修改系统自带的挂载脚本。通过 root 权限将原始的 `mount_ntfs` 程序重命名,并创建一个新的脚本文件,在其中调用原始程序并强制添加读写(`rw`)参数。这个方法绕过了第三方工具,利用了系统自身潜藏的能力。 作者在最后也提醒了两个实操要点:一是建议 NTFS 分区最好设置卷标,避免因默认的“未命名磁盘”导致挂载失败;二是指出网上流传的添加 `nobrowse` 参数的做法其实多此一举,正确理解 `-o` 参数的含义后,完全可以让分区正常显示在 Finder 侧边栏,无需额外折腾。整个方案简洁直接,适合希望用最小改动实现原生读写的 Mac 用户参考。

本机暂存
IT 2014-11-24 23:44:23 / 累计浏览 2,401

VirtualBox 虚拟机镜像文件 UUID 已存在问题

这篇讲的是VirtualBox使用中的一个常见陷阱:当你想把一个已用过的虚拟机镜像文件拷贝到另一台电脑时,VirtualBox会报错“UUID已存在”,阻止你直接加载。问题的根因在于,镜像文件自带的唯一识别码(UUID)已在原电脑的VirtualBox环境中注册过,系统不允许重复。 文章作者亲身从USB盘加载虚拟机时碰到了这个坑。界面选项里找不到解决办法,但作者记起命令行可以搞定。具体的修复步骤是:打开终端,进入VirtualBox的安装目录,然后使用 `VBoxManage internalcommands sethduuid` 命令,紧跟VDI镜像文件的路径,为它重新生成一个全新的UUID。执行成功后,再新建虚拟机加载这个镜像文件,就能顺利运行了。 对于经常迁移虚拟机环境的技术人员来说,这个用命令行“重置身份证”的小技巧很实用,能快速绕过这个报错,省去重新导出导入的麻烦。

本机暂存
IT 2014-11-24 23:42:47 / 累计浏览 6,652

mac系统更换硬盘及初始化开发环境的记录

作者从自己使用多年的MacBook Pro陷入频繁死机的困境出发,诊断发现是机械硬盘因长期不当使用(经常盖着盖子携带)导致硬件故障,通过TechTool工具确认硬盘SMART检查失败。文章详细记录了整个更换硬盘与重装系统的全过程:从准备新硬盘、制作Mac OS X Mavericks系统U盘,到拆机换盘、分区安装系统。其中特别提到数据恢复时踩的一个大坑——备份恢复后所有文件因换行符格式变化而显示为修改状态,最终通过硬盘盒直接从旧硬盘拷贝数据才得以解决。在初始化开发环境部分,作者逐步搭建了Xcode、iTerm2、Homebrew、Python、MacVim和MySQL等工具链,并分享了MySQL安装中的具体步骤与卸载方法,例如需要手动链接命令行工具并设置环境变量。整篇记录不仅提供了清晰的故障排查思路,还涵盖了从硬件维护到软件配置的实用细节,对面临类似Mac老机型维护的读者有直接的参考价值。

本机暂存
IT 2014-11-23 21:47:21 / 累计浏览 3,821

修改Linux网卡连接速度

这篇讲的是作者如何发现并解决内网Linux服务器上传速度异常缓慢的问题。服务器文件传输速度只有1MB/s,作者怀疑是网卡工作模式所致。通过 `ethtool eth0` 命令检查,果然发现网卡速度被锁定在了10Mb/s的低速模式,即使它支持100Mb/s。 针对这个问题,作者使用了 `ethtool -s eth0 speed 100 duplex full` 命令,将网卡强制设定为100Mb/s全双工模式。调整后再次检查,网卡已成功切换到新的工作状态。最终实测文件传输速度达到了10MB/s,性能恢复正常。 这篇文章简洁清晰地展示了一个常见的网络性能问题排查过程:从现象(速度慢)到诊断(查网卡模式),再到解决(调整速率参数),并验证了效果。对于运维人员或遇到类似网络瓶颈的开发者,这个用 `ethtool` 手动调整链路参数的方法,是一个直接有效的参考方案。

本机暂存
IT 2014-11-23 21:43:10 / 累计浏览 2,348

给Ubuntu添加Windows及Mac字体

这篇教程针对 Ubuntu 系统因开源授权而缺失部分优质字体的问题,提供了一个将 Windows 与 Mac 字体移植过来的完整方案。作者从实际需求出发,详细讲解了从字体文件的准备、筛选(提示需移除 .fon 与部分 .otf 格式),到创建系统目录、复制文件、修改权限,最后执行命令更新字体缓存的全过程。文章特别给出了每一步对应的终端命令,比如 `sudo mkdir`、`sudo cp` 和 `sudo fc-cache`,确保用户可以精准操作。完成这些步骤并注销系统后,即可在 Ubuntu 环境中流畅使用这些跨平台字体。整个方案直击痛点,步骤清晰,对于希望提升 Ubuntu 桌面视觉体验的用户来说非常实用。

本机暂存
IT 2014-11-23 21:35:24 / 累计浏览 1,647

监控Netstat中的TCP数据

作者从实际运维中遇到的netstat报错说起:当执行netstat命令时,若版本较旧可能触发“error parsing /proc/net/netstat”错误。解决方法是通过rpm确认netstat属于net-tools包,随后用yum升级即可修复。不过,文章的重点不止于故障排查,更延伸到如何有效监控TCP连接数据。 作者指出,直接监控netstat -s输出的绝对值(如连接数、段收发量)在Graphite等工具中几乎是一条平直线——因为数值基数太大,微小波动肉眼无法识别。真正有价值的是捕捉这些数据的相对变化率。为此,他分享了一段可直接运行的Shell脚本,通过循环对比相邻时刻的TCP统计值,实时输出增量数据,让监控图表清晰反映系统的动态趋势。 这篇文章从一个具体错误入手,最终给出了提升监控有效性的实用技巧,对需要关注TCP连接状态的运维人员颇具参考价值。

本机暂存