MoreRSS

site iconAnZhihe | 安志合修改

国学和传统文化爱好者,IT行业从业者,运维和SRE。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

AnZhihe | 安志合的 RSS 预览

故障处理最佳实践

2025-06-18 05:48:02

或多或少我们都会经历线上的故障。在我的职业生涯中,就经历过很多的线上故障。老实说,线上故障是我们技术人员成长中必须要经历的事。从故障中我们可以吸取到很多教训,能让我们学到很多书本上学不到的知识。坑踩多了,我们会变得越来越有经验,也就成为老司机了。

不过,我看到很多公司处理线上故障的方式并不科学,而且存在很多问题,所以,想写文章来分享一些我的经验。这些经验主要来自亚马逊和阿里这两家互联网公司,以及我个人的经验总结。希望这套方法能够对你有帮助。

故障发生时

在故障发生时,最重要的是快速恢复故障。而快速恢复故障的前提是快速定位故障源。因为在很多分布式系统中,一旦发生故障就会出现“多米诺骨牌效应”。也就是说,系统会随着一个故障开始一点一点地波及到其它系统,而且这个过程可能会很快。一旦很多系统都在报警,要想快速定位到故障源就不是一件简单的事了。

在亚马逊内部,每个开发团队至少都会有一位 oncall 的工程师。在 oncall 的时候,工程师要专心处理线上故障,轮换周期为每人一周。一旦发生比较大的故障,比如,S1 全部不可用,或 S2 某功能不可用,而且找不到替代方案,那么这个故障就会被提交到一个工单系统里。几乎所有相关团队 oncall 的工程师都会被叫到线上处理问题。

工作流是,先线上签到,然后自查自己的服务,如果自己的服务没有问题,那么就可以在旁边待命(standby),以备在需要时进行配合。如果问题没有被及时解决,就会自动升级到高层,直到 SVP 级别。

大家都知道,在亚马逊,不是按技能分工,而是按职责分工,也就是一个团队不是按前端、后端、运维等来分工,而是按所负责的 Service 来分工。所以,亚马逊的开发人员都是前端、后端、测试、运维全部都要干的。而亚马逊内部有很多的服务,一旦出现问题,为了避免一个工单在各个团队流转,需要所有团队上线处理,这样是最快的。

如果我们的系统架构是分布式服务化的,那么一个用户的请求可能会经过很多的服务,开发和运维起来是非常麻烦的。此时,跨团队跨部门的开发和运维就变得非常的重要了。就我的经历而言,在故障发生时,亚马逊的处理过程是比较有效和快速的,尤其是能够快速地定位故障源。对于被影响的其他团队也可以做一定的处理,比如做降级处理,这样可以控制故障的范围不被扩散。

故障源团队通常会有以下几种手段来恢复系统。

  • 重启和限流。重启和限流主要解决的是可用性的问题,不是功能性的问题。重启还好说,但是限流这个事就需要相关的流控中间件了。

  • 回滚操作。回滚操作一般来说是解决新代码的 bug,把代码回滚到之前的版本是快速的方式。

  • 降级操作。并不是所有的代码变更都是能够被回滚的,如果无法回滚,就需要降级功能了。也就是说,需要挂一个停止服务的故障公告,主要是不要把事态扩大。

  • 紧急更新。紧急更新是常用的手段,这个需要强大的自动化系统,尤其是自动化测试和自动化发布系统。假如你要紧急更新 1000 多台服务器,没有一个强大的自动化发布系统是很难做到的。

也就是说,出现故障时,最重要的不是 debug 故障,而是尽可能地减少故障的影响范围,并尽可能快地修复问题

国内的很多公司,都是由专职的运维团队来处理线上问题的。然而,运维团队通常只能处理一些基础设施方面的问题,或是非功能性的问题。对于一些功能性的问题,运维团队是完全没有能力处理的,只能通过相应的联系人,把相关的开发人员叫到线上来看。而可能这个开发人员看到的是别的系统有问题,又会叫上其它团队的人来。所以,一级一级地传递下去,会浪费很多时间。

故障前的准备工作

为了能够在面临故障时做得有条不紊,我们需要做一些前期的准备工作。这些准备工作做得越细,那么故障处理起来也就越有条理。我们知道,故障来临时,一切都会变得混乱。此时,对于需要处理故障的我们来说,事可以乱,但人不能乱。如果人跟着事一起乱,那就是真正的混乱了。

所以,我们需要做一些故障前的准备工作。在这里,我给出一些我的经验。

  • 以用户功能为索引的服务和资源的全视图。首先,我们需要一个系统来记录前端用户操作界面和后端服务,以及服务所使用到的硬件资源之间的关联关系。这个系统有点像 CMDB(配置管理数据库),但是比 CMDB 要大得多,是以用户端的功能来做索引的。然后,把后端的服务、服务的调用关系,以及服务使用到的资源都关联起来做成一个视图。

这个视图最好是由相应的自动化监控系统生成。有了这个资源图后,我们就可以很容易地找到处理故障的路径了。这就好像一张地图,如果没有地图,我们只能像个无头苍蝇一样乱试了

  • 为地图中的各个服务制订关键指标,以及一套运维流程和工具,包括应急方案。以用户功能为索引,为每个用户功能的服务都制订一个服务故障的检测、处理和恢复手册,以及相关的检测、查错或是恢复的运维工具。对于基础层和一些通用的中间件,也需要有相应的最佳实践的方法。

比如 Redis,怎样检查其是否存在问题,怎样查看其健康和运行状态?哪些是关键指标,面对常见的故障应该怎么应对,服务不可用的服务方案是什么,服务需要回滚了应该怎么操作,等等。这就好像一个导航仪,能够告诉你怎么做。而没有导航仪,就没有章法,会导致混乱

  • 设定故障的等级。还要设定不同故障等级的处理方式。比如,亚马逊一般将故障分为 4 级:1 级是全站不可用;2 级是某功能不可用,且无替代方案;3 级是某功能不可用,但有替代方案;4 级是非功能性故障,或是用户不关心的故障。阿里内的分类更多样一些,有时会根据影响多少用户来定故障等级。

制定故障等级,主要是为了确定该故障要牵扯进多大规模的人员来处理。故障级别越高,牵扯进来的人就越多,参与进来的管理层级别也就越高。就像亚马逊内的全员上线 oncall 一样。这就好像是我们社会中常用的“红色警报”、“橙色警报”、“黄色警报”之类的,会触发不同的处理流程

  • 故障演练。故障是需要演练的。因为故障并不会时常发生,但我们又需要不断提升处理故障的能力,所以需要经常演练。一些大公司,如 Netflix,会有一个叫 Chaos Monkey 的东西,随机地在生产线上乱来。Facebook 也会有一些故障演习,比如,随机关掉线上的一些服务器。总之,要提升故障处理水平,最好的方式就是实践。见得多了,处理得多了,才能驾轻就熟。故障演练是一个非常好的实践

  • 灰度发布系统。要减少线上故障的影响范围,通过灰度发布系统来发布是一个很不错的方式。毕竟,我们在测试环境中很难模拟出线上环境的所有情况,所以,在生产线上进行灰度发布或是 A/B 测试是一件很好的事。

在亚马逊,发布系统中有一个叫 Weblab 的系统,就是用来做灰度发布的。另外,亚马逊全球会有多个站点。一般来说,会先发中国区。如果中国区没什么问题了,就发日本区,然后发欧洲区,最后是美国区。而如果没有很多站点的话,那么你就需要一个流量分配系统来做这个事了。

故障复盘过程

对于故障,复盘是一件非常重要的事情,因为我们的成长基本上就是从故障中总结各种经验教训,从而可以获得最大的提升。在亚马逊和阿里,面对故障的复盘有不一样的流程,虽然在内容上差不多,但细节上有很多不同。

亚马逊内部面对 S1 和 S2 的故障复盘,需要那个团队的经理写一个叫 COE(Correction of Errors)的文档。这个 COE 文档,基本上包括以下几方面的内容。

  • 故障处理的整个过程。就像一个 log 一样,需要详细地记录几点几分干了什么事,把故障从发生到解决的所有细节过程都记录下来。

  • 故障原因分析。需要说明故障的原因和分析报告。

  • Ask 5 Whys。需要反思并反问至少 5 个为什么,并为这些“为什么”找到答案。

  • 故障后续整改计划。需要针对上述的“Ask 5 Whys”说明后续如何举一反三地从根本上解决所有的问题。

然后,这个文档要提交到高层管理层,向公司的 VP 级别进行汇报,并由他们来审查。

阿里的故障复盘会会把所有的相关人员都叫到现场进行复盘。我比较喜欢这样的方式,而不是亚马逊的由经理来操作这个事的方式。虽然阿里的故障复盘会会开很长时间,但是把大家叫在一起复盘的确是一个很好的方式。一方面信息是透明的,另一方面,也是对大家的一次教育。

阿里的故障处理内容和亚马逊的很相似,只是没有“Ask 5 Whys”,但是加入了“故障等级”和“故障责任人”。对于比较大的故障,责任人基本上都是由 P9/M4 的人来承担。而且对于引发故障的直接工程师,阿里是会有相关的惩罚机制的,比如,全年无加薪无升职,或者罚款。

老实说,我对惩罚故障责任人的方式非常不认同。

  • 首先,惩罚故障责任人对于解决故障完全没有任何帮助。因为它们之间没有因果关系,既不是充分条件,也不是必要条件,更不是充要条件。这是逻辑上的错误。

  • 其次,做得越多,错得越多。如果不想出错,最好什么也不要做。所以,惩罚故障责任人只会引发大家都很保守,也会引发大家都学会保守,而且会开始推诿,营造一种恐怖的气氛。

说个小插曲。有一次和一个同学一起开发一个系统,我们两个的代码在同一个代码库中,而且也会运行在同一个进程里。这个系统中有一个线程池模型,我想直接用了。结果因为这个线程池是那个同学写的,他死活不让我用,说是各用各的分开写,以免出了问题后,说不清楚,会担上不必要的责任。最后,在一个代码库中实现了两个线程池模型,我也是很无语。

另外,亚马逊和阿里的故障整改内容不太一样。亚马逊更多的是通过技术手段来解决问题,几乎没有增加更复杂的流程或是把现有的系统复杂化。

阿里的故障整改中会有一些复杂化问题的整改项,比如,对于误操作的处理方式是,以后线上操作需要由两个人来完成,其中一个人操作,另一个人检查操作过程。或是对于什么样的流程需要有审批环节。再比如:不去把原有的系统改好,而是加入一个新的系统来看(kān,第一声)着原来的那个不好的系统。当然,也有一些整改措施是好的,比如,通过灰度发布系统来减少故障面积。

故障整改方法

就故障整改来说,我比较喜欢亚马逊的那个 Ask 5 Whys 玩法,这个对后面的整改会有非常大的帮助。最近一次,在帮一家公司做一个慢 SQL 的故障复盘时,我一共问了近 9 个为什么。

  1. 为什么从故障发生到系统报警花了 27 分钟?为什么只发邮件,没有短信?

  2. 为什么花了 15 分钟,开发的同学才知道是慢 SQL 问题?

  3. 为什么监控系统没有监测到 Nginx 499 错误,以及 Nginx 的 upstream_response_time 和 request_time?

  4. 为什么在一开始按 DDoS 处理?

  5. 为什么要重启数据库?

  6. 为什么这个故障之前没有发生?因为以前没有上首页,最近上的。

  7. 为什么上首页时没有做性能测试?

  8. 为什么使用这个高危的 SQL 语句?

  9. 上线过程中为什么没有 DBA 评审?

通过这 9 个为什么,我为这家公司整理出来很多不足的地方。提出这些问题的大致逻辑是这样的。

第一,优化故障获知和故障定位的时间。

  • 从故障发生到我们知道的时间是否可以优化得更短?

  • 定位故障的时间是否可以更短?

  • 有哪些地方可以做到自动化?

第二,优化故障的处理方式。

  • 故障处理时的判断和章法是否科学,是否正确?

  • 故障处理时的信息是否全透明?

  • 故障处理时人员是否安排得当?

第三,优化开发过程中的问题。

  • Code Review 和测试中的问题和优化点。

  • 软件架构和设计是否可以更好?

  • 对于技术欠债或是相关的隐患问题是否被记录下来,是否有风险计划?

第四,优化团队能力。

  • 如何提高团队的技术能力?

  • 如何让团队有严谨的工程意识?

具体采取什么样的整改方案会和这些为什么很有关系。

总之还是那句话,解决一个故障可以通过技术和管理两方面的方法。如果你喜欢技术,是个技术范,你就更多地用技术手段;如果你喜欢管理,那么你就会使用更多的管理手段。我是一个技术人员,我更愿意使用技术手段。

根除问题的本质

最后,对于故障处理,我能感觉得到,一个技术问题,后面隐藏的是工程能力问题,工程能力问题后面隐藏的是管理问题,管理问题后面隐藏的是一个公司文化的问题,公司文化的问题则隐藏着创始人的问题……

所以,这里给出三条我工作这 20 年总结出来的原则(Principle),供你参考。

  1. 举一反三解决当下的故障。为自己赢得更多的时间。

  2. 简化复杂、不合理的技术架构、流程和组织。你不可能在一个复杂的环境下根本地解决问题。

  3. 全面改善和优化整个系统,包括组织。解决问题的根本方法是改善和调整整体结构。而只有简单优雅的东西才有被改善和优化的可能。

换句话说,我看到很多问题出了又出,换着花样地出,大多数情况下是因为这个公司的系统架构太过复杂和混乱,以至于你不可能在这样的环境下干干净净地解决所有的问题。所以,你要先做大扫除,简化掉现有的复杂和混乱。如果你要从根本上改善一个事,那么首先得把它简化了。这就是这么多年来,我得到的认识。

但是,很不幸,我们就是生活在这样一个复杂的世界,有太多的人喜欢把简单的问题复杂化。所以,要想做到简化,基本上来说是非常非常难的。

来源:《左耳听风专栏:故障处理最佳实践》


参考:围绕故障管理谈SRE体系建设

《死亡诗社》经典台词

2025-06-15 00:44:52

1748447060530178.jpg


一、及时行乐,让你的生命超越凡俗


  《船长,我的船长》Oh ,captain ,my captain!


  《劝少年们珍惜时光》及时采撷你的花蕾/旧时光一去不回/今天尚在微笑的花朵/明天变得风中枯萎(丁尼生)

    Gather ye rosebuds while ye may/Old time is still a-flying/And this same flowers that smiles today/Tomorrow will be dying


  因为信不信由你,这个房间里的每个人,总有一天都要停止呼吸,僵冷,死亡。我要你们向前到这儿来,细细玩味过去的面孔,你们经过这儿无数次,但从未真正看过他们,和你的差异并不大,对吧?同样的发型,和你们一样精力旺盛,和你们一样不可一世,世界都在他们的掌握之中,他们认为注定要成就大事,和大多数的你们一样,他们的双眼充满了希望,和你们一样。他们是否虚度时光,到最后一无所成?因为各位所见到的……这些男孩现在都已化为尘土了,如果你们仔细倾听,便能听见他们在低声耳语,附耳过去,仔细听,听见了?CARPE..。听见了吗?CARPE... CARPE DIEM 及时行乐,孩子们,让你的生命超越凡俗。

    Becuase believe or not, each one of us in this room is one day going to stop breathing, turn cold and die. I'd like you to step forward of you and peruse some of the faces from the past. They're not that different from you , are they? Same haircuts.


    Full of hormones. Just like you. Invincible just like you fell. The world is their oyster. They belive they're destined for great things, just like many of you, their eyes are full of hope, just like you. Did they wait until it was too late to make from their lives evenone iota of what they were capable? Because, you see gentelman, these boys are now fertilising daffodils.


    But if you listen real close, you can hear them whisper their legacy to you. Go on, lean in. Listen, you hear it ? Carpe...hear it?...Carpe, carpe diem, seize the day, boys, make your lives extrordinary。


二、诗歌、美丽、浪漫、爱情,才是我们活着的意义。


  《英语诗歌五百年》序言:要完全理解诗歌,我们首先必须了解它的格调、韵律、修辞手法,然后提两个问题:第一,诗主题如何艺术地实现;第二,诗主题的重要性。

    To fully understand poetry, we must first be fluent with its meter, rhyme and figures of speech, then ask two questions: 1) How artfully has the objective of the poem been rendered and 2) How important is that objective?


  我们不是在接水管。We're not laying pipe。


  惟有在梦中,人们才是真正自由的。Only in their dreams can men be truly free。


  学会自己思考,学会欣赏文学和语言。不管别人怎么说,文学和语言的确能改变世界。

    Learn to think for yourselves again. No matter what anybody tells you, words and ideas can change the world。


   我们读诗、写诗并不是因为它们好玩,而是因为我们是人类的一分子,而人类是充满激情的。没错,医学、法律、商业、工程,这些都是崇高的追求,足以支撑人的一生。但诗歌、美丽、浪漫、爱情,这些才是我们活着的意义。

    We don't read and write poetry because it's cute. We read and write poetry because we are members of the human race. And the human race is filled with passion. And medicine, law, business, engineering -- these are noble pursuits and necessary to sustain life. But poetry, beauty, romance, love -- these are what we stay alive for。


  死亡诗人致力于吸取生命的精华。(梭罗)

    The Dead Poets was dedicated to "sucking the marrow out of life"。


  我们是一群浪漫主义者。我们不仅仅是念诗,诗从我们舌间滑落,就像蜜糖。情绪高涨,女人亢奋,灵魂驰骋。

    We weren't a Greek organization. We were Romantics. We didn't just read poetry, we let it drip from our tongues like honey. Spirits soared, women swooned and gods were created。


  我步入丛林/因为我希望生活得有意义/我希望活得深刻/吸取生命中所有的精华/把非生命的一切都击溃/以免当我生命终结/发现自己从没有活过(梭罗)

    I went to the woods because I wanted to live deliberately. I wanted to live deep and suck out all the marrow of life.To put to rout all that was not life, and not, when I had come to die, discover that I had not lived。


  来吧,我的朋友/寻找更新世界尚为时不晚/我决心已定,要驶过夕阳尽头/尽管我们不再有昔日的伟力,可以震天撼地/我们仍有着,同样的英雄的心/时间和命运,使它衰老/但坚强意志仍在/让我们去奋斗,去探索,去发现/永不屈服(丁尼生)

    Come my friends, 'Tis not too late to seek a newer world for my purpose holds to sail beyond the sunset. And though we are not now that strength which in old days Moved earth and heaven; that which we are, we are;-- One equal temper of heroic hearts, Made weak by time and fate, but strong in will. To strive, to seek, to find, and not to yield。(Alfred Lord Tennyson)


  然后我有了信仰/然后我有了想象/我被他们沉迷的嘲笑所感染/然后我看见刚果河/在黑土地上流过/在森林中划下一道金色的沟壑(语言的节奏感)

    Then I had religion, then I had a vision. I could not turn from their revel in derision. Then I saw the Congo creeping through the black, cutting through the forest with a golden track。


三、要敢于开拓自己的天地


  语言的目的只有一个:交流(学生)...追求女人(老师)

    language was developed for one endeavor, and that is?

    To communicate...No,to woo women。


  站上讲台,用不同的眼光来看待事物。

    we must constantly look at things in a different way。


  一旦觉得自己懂得,就必须换一种角度来看。这可能显得有些荒唐,或者愚蠢,但必须试一下。同样读书的时候,不要只想作者怎么看,想想你自己怎么看。

    Just when you think you know something, you have to look at it in another way. Even though it may seem silly or wrong, you must try! Now, when you read, don't just consider what the author thinks. Consider what you think。


  你们必须努力寻找自己的声音,因为你越迟开始寻找,找到的可能性就越小。

    Boys, you must strive to find your own voice. Because the longer you wait to begin, the less likely you are to find it at all。


  梭罗说“大多数人都生活在平静的绝望中”。别陷入这种境地,冲出来。别像老鼠逃跑似的,看看你的周围,要敢于开拓自己的天地。

    Most men lead lives of quiet desperation。(Thoreau)Don't be resigned to that. Break out! Don't just walk off the edge like lemmings。


四、做一个真正的上帝!


  对我来说,运动只是一种让其他人把我们推向极致的机会。

    For me, sport is actually a chance for us to have other human beings push us to excel。


     与逆境不屈抗争,以无畏的气势面对敌人。

    Oh to struggle against great odds. To meet enemies undaunted。


  做一个世界的水手,游遍所有的港口。

    To be a sailor of the world, bound for all ports。


  我要做生活的主宰,而不是奴隶。

    Oh, I live to be the ruler of life, not a slave。


  走上绞刑台,面对行刑的枪口,我息安之如泰。

    To mount the scaffolds. To advance to the muzzle of guns with perfect nonchalance。


  舞蹈、鼓掌、兴奋、欢叫、跳跃、飘飘荡荡、滚滚向前

    To dance, clap hands, exalt, shout, skip, roll on, float on。


  哦,让生活从此变成一首欢乐的诗。

    Oh, to have life henceforth the poem of new joys。


  做一个真正的上帝!

    To indeed be a god!


五、主题简单无妨,只是不要太俗套


      我在她微笑中看到了甜蜜/她的眼睛闪烁着光芒/但生活如此复杂/我已满意/只要知道/只要知道/她还活着

    I see a sweetness in her smile. Blight light shines from her eyes. But life is complete; contentment is mine, Just knowing that... just knowing that she's alive。


   主题简单无妨,只是不要太俗套

    Sometimes the most beautiful poetry can be about simple things. Just don't let your poems be ordinary。


    惠特曼“站在世界屋脊上,我喊出我野性的狂叫”

    I sound my barbaric yawp over the rooftops of the world。

        一个牙齿流汗的疯子

    a sweaty-toothed madman。

        我闭上眼睛,他的形象在我眼前晃悠

    I close my eyes. this image floats beside me。

        一个牙齿流汗的疯子,瞪得我心怦怦直跳

    A sweaty-toothed madman with a stare that pounds my brain。

        他伸出手,掐信我的脖子

    His hands reach out and choke me。

        他一直在念叨真理

    all the time he's mumbling.Truth。

        真理就像一床总让你双脚冰凉的毯子/你怎么扯,怎么拽,总也不够/踢也好,打也好,它总也盖不住我们/从我们哭着降生/到我们奄奄一息/它只会盖住你的脸/不管你如何痛苦/不管你如何痛苦/如何叫喊

    Truth is like, like a blanket that always leaves your feet cold. You push it, stretch it, it'll never be enough. You kick at it, beat it, it'll never cover any of us. From the moment we enter crying to the moment we leave dying, it will just cover your face as you wail and cry and scream。


六、你们用不着表演,完全为你自己。


  在别人面前坚持自己的信念是多么困难。

    the difficulty in maintaining your own beliefs in the face of others。


  我们都有一种被人接受的需要。但是你必须坚持自己的信仰是独特的是你自己的,哪怕别人认为它们很怪,或者很讨厌,哪怕一群人都说,那太差。

    we all have a great need for acceptance. But you must trust that your beliefs are unique, your own, even though others may think them odd or unpopular, even though the herd may go。


  罗伯特·弗洛斯特:希望你们也找到自己的路,找到自己的步伐、步调,任何方向,任何东西都行,不管是自负也好,愚蠢也好,什么都行。

    I want you to find your own walk right now. Your own way of striding, pacing. Any direction. Anything you want. Whether it's proud, whether it's silly, anything. Gentlemen, the courtyard is yours。


  你们用不着表演,完全为你自己。You don't have to perform. Just make it for yourself。


  要敢于逆流而上。Swim against the stream。


原文链接:https://movie.douban.com/review/3366847/


参考:死亡诗社 Dead Poets Society (1989)

fdisk/parted创建与删除分区

2025-06-09 21:20:30

fdisk新建分区操作流程

目标示例:在 /dev/sdb 磁盘上创建大小为 300G 的新分区 /dev/sdb1,类型为 Linux LVM(8e)

1. 启动 fdisk

fdisk /dev/sdb   # 替换为目标磁盘(如 /dev/sdc)

2. 查看现有分区表(可选)

Command (m for help): p   # 打印当前分区信息

3. 创建新分区

Command (m for help): n    # 新建分区
  • 设置选择分区类型

Select (default p): p    # 主分区(p)或扩展分区(e)
  • 设置分区号(默认自动分配):

Partition number (1-4, default 1): 1   # 输入分区号(如1)
  • 指定起始扇区(默认从磁盘空闲位置开始):

First sector (2048-209715199, default 2048): [回车]  # 默认起始位置
  • 指定分区大小

Last sector, +/-sectors or +/-size{K,M,G,T,P}: +300G  # 结束位置或直接指定大小

4. 修改分区类型(可选)

例如设置为 Linux LVM(类型代码 8e

Command (m for help): t    # 更改分区类型
Selected partition 1       # 选择刚创建的分区(如1)
Hex code (type L to list): 8e  # 输入类型代码(LVM为8e,Linux文件系统为83)

5. 保存并退出

Command (m for help): w   # 写入分区表并退出

警告:输入 w 前请确认操作无误!若需放弃修改,输入 q 退出。

6. 刷新分区表

partprobe /dev/sdb   # 让系统重新识别分区(无需重启)
# 或
reboot              # 重启系统(可选)

验证分区

fdisk -l /dev/sdb     # 检查分区表
lsblk /dev/sdb        # 查看分区层次

后续操作

1. 格式化分区(例如 ext4):

mkfs.ext4 /dev/sdb1

2. 挂载分区

mkdir /mnt/data
mount /dev/sdb1 /mnt/data

3. 开机自动挂载

blkid /dev/sdb1                    # 获取UUID
vi /etc/fstab                      # 添加以下行
UUID=xxxx-xxxx  /mnt/data  ext4  defaults  0 0

注意事项

  1. 数据备份:操作前备份重要数据,分区操作可能导致数据丢失。

  2. 磁盘标识:务必确认目标磁盘(如 /dev/sdb),避免误操作系统盘

  3. 分区对齐:建议使用默认起始扇区(自动对齐优化性能)。

  4. 分区类型

  • LVM 分区:类型代码 8e

  • 普通数据分区:默认 83(Linux 文件系统)。

  • MBR 限制

    • 最多 4 个主分区,如需更多分区需创建扩展分区(类型 5)。

    • 单个分区最大支持 2TB(超过需使用 GPT 分区表,改用 parted 工具)。

    常见问题

    Q1: 磁盘空间未完全分配?

    • 若需将整块磁盘分配给单个分区,在指定分区大小时输入 +100% 或直接回车使用默认最大值。

    Q2: 分区后系统未识别?

    • 运行 partprobe 或重启系统刷新分区表。

    • 检查是否已格式化(未格式化的分区无法挂载)。


    parted新建分区操作流程

    以下是使用 parted 工具创建新分区的详细示例,适用于 GPT 或 MBR 分区表:

    场景示例

    将 /dev/sdb 磁盘划分为一个 500GB 的分区(文件系统为 ext4),剩余空间留给后续使用。

    操作步骤

    1. 启动 parted 并选择磁盘

    parted /dev/sdb   # 替换为目标磁盘(如 /dev/sdc)

    2.(可选)创建新分区表

    如果磁盘未初始化或需清空现有分区表:

    (parted) mklabel gpt     # 创建 GPT 分区表(或 msdos 对应 MBR)

    警告:此操作会清除磁盘所有数据!

    3. 查看当前分区信息

    (parted) print        # 确认磁盘容量及现有分区

    4. 创建新分区

    (parted) mkpart
    Partition name?  []? data_part1           # 分区名称(GPT可用,MBR忽略)
    File system type?  [ext2]? ext4           # 文件系统类型(仅标识,不实际格式化)
    Start? 1GiB                               # 起始位置(建议对齐,如 1GiB)
    End? 500GiB                               # 结束位置(或百分比如 50%)

    5. 验证分区

    (parted) print        # 检查新分区(如 /dev/sdb1)

    6. 退出 parted

    (parted) quit

    完整命令示例

    parted /dev/sdb <<EOF
    mklabel gpt
    mkpart data_part1 ext4 1GiB 500GiB
    print
    quit
    EOF

    关键参数说明

    参数 说明
    mklabel <type> 创建分区表类型:gpt 或 msdos(MBR)
    mkpart 创建分区,需指定名称(GPT)、文件系统类型(仅标识)、起始/结束位置
    -a optimal (可选)对齐到最佳性能扇区(parted 默认自动对齐)
    unit GiB (交互模式)设置单位为 GiB,方便输入

    注意事项

    1. 数据备份:操作前备份重要数据,分区操作不可逆。

    2. 磁盘标识:务必确认目标磁盘(如 /dev/sdb),避免误操作系统盘。

    3. 分区对齐:建议起始位置从 1MiB 或 1GiB 开始,避免性能损失。

    4. GPT vs MBR

    • GPT:支持 >2TB 磁盘,最多 128 分区。

    • MBR:兼容旧系统,最多 4 主分区(或扩展分区)。


    fdisk删除分区操作流程

    使用 fdisk 删除分区的操作需要谨慎,删除分区会导致数据丢失。以下是详细步骤:

    操作步骤

    1. 列出磁盘分区信息

    fdisk -l

    确认要操作的磁盘(如 /dev/sdb)及需要删除的分区号(如 /dev/sdb1)。

    2. 启动 fdisk 工具

    fdisk /dev/sdb   # 替换为目标磁盘(如 sdb、sdc 等)

    3. 查看当前分区表

    • 在 fdisk 交互界面输入 p,打印分区表,确认要删除的分区号。

    4. 删除分区

    • 输入 d 命令。

    • 输入要删除的分区号(如 1 对应 /dev/sdb1)。

    Command (m for help): d
    Partition number (1-3, default 3): 1   # 输入目标分区号

    5. 保存并退出

    • 输入 w 将更改写入磁盘并退出:

    Command (m for help): w
    • 如果误操作,输入 q 退出不保存

    6. 刷新分区表(可选):

    partprobe /dev/sdb   # 让系统重新读取分区表(无需重启)

    注意事项

    1. 数据丢失风险:删除分区会清除分区表信息,导致该分区数据不可访问(需提前备份)。

    2. 确认目标磁盘:操作前务必通过 fdisk -l 确认磁盘标识符(如 /dev/sdb),避免误删系统盘。

    3. 挂载状态检查:确保分区未被挂载:

    umount /dev/sdb1   # 如果已挂载,先卸载

    4. LVM 关联:如果分区是 LVM 物理卷(PV),需先移除 LVM 关联:

    vgreduce --removemissing vg_name   # 从卷组中移除缺失的PV
    pvremove /dev/sdb1                 # 删除物理卷

    parted删除分区操作流程

    • parted:更友好的交互式分区工具,支持 GPT 分区表:

    parted /dev/sdb
    (parted) print          # 查看分区
    (parted) rm 1           # 删除分区1
    (parted) quit

    完成操作后,分区将从磁盘中移除。如果需要重新分区,可再次使用 fdisk 或 parted 创建新分区。


    使用gdisk将MBR (DOS)分区表转为GPT分区

    操作步骤

    1. 备份分区表和数据(操作会破坏现有分区,需先备份数据)

    # 备份当前分区表(MBR)
    sfdisk -d /dev/sdb > sdb_mbr_backup.txt
    
    # 备份重要数据(必须执行!)
    cp -a /挂载点路径 /备份路径

    2. 启动 gdisk

    gdisk /dev/sdb

    如果看到提示:
    Found invalid GPT and valid MBR; converting MBR to GPT format in memory.
    这是正常现象,按回车继续。

    3. 转换分区表类型

    Command (? for help): r  # 进入恢复/转换菜单
    Recovery/transformation command (? for help): g  # 将MBR转换为GPT(有些版本使用o转换,具体看工具使用帮助)
    Recovery/transformation command (? for help): w  # 写入更改
    Do you want to proceed? (Y/N): Y  # 确认操作

    ⚠️ 警告:此操作会立即清除所有MBR分区信息

    4. 验证转换结果

    # 查看分区表类型
    parted /dev/sdb print | grep Table
    # 应显示:Partition Table: gpt
    
    # 检查分区是否丢失(此时应无分区)
    gdisk -l /dev/sdb

    5. 重新创建GPT分区

    gdisk /dev/sdb

    按 n 创建新分区(根据需要设置大小和类型代码)

    例如创建 Linux 文件系统分区:

    Command (? for help): n
    Partition number: 1  # 分区号
    First sector: 2048  # 起始扇区(默认)
    Last sector: +200G  # 结束位置(或直接回车使用全部空间)
    Hex code: 8300      # Linux文件系统类型(LVM为8e00)
    • 按 w 保存分区表

    6. 创建文件系统并恢复数据

    # 格式化分区(例如ext4)
    sudo mkfs.ext4 /dev/sdb1
    
    # 挂载并恢复数据
    sudo mount /dev/sdb1 /mnt/new
    sudo cp -a /备份路径/* /mnt/new/

    注意事项

    1. 数据风险

    • 转换过程会完全清除MBR分区表,所有现有分区需要手动重建

    • 如果磁盘已安装操作系统,转换后系统可能无法启动(需修复引导)

  • 兼容性问题

    • 旧主板(BIOS模式)可能需要启用 CSM 兼容模块才能从GPT磁盘启动

    • 如果磁盘用作系统盘,建议使用 grub-install 重新安装引导加载程序

  • 替代方案

    • 如需保留数据转换,可使用 sgdisk(高风险):

      sudo sgdisk -g /dev/sdb  # 保留数据转换(不保证成功)
    • 更安全的方法是备份数据后全新分区


    转换前后对比

    特性 MBR (DOS) GPT
    最大磁盘大小 2TB 8ZB(理论值)
    分区数量 4个主分区(或3主+1扩展) 128个主分区(实际限制)
    兼容性 所有系统支持 需要UEFI或BIOS+CSM支持
    安全特性 支持CRC校验和备份分区表


    参考:LVM卷在线扩缩容及常用操作

    死亡诗社 Dead Poets Society (1989)

    2025-05-30 05:09:12

    死亡诗社 Dead Poets Society (1989)

    dead_poets.jpg

    死亡诗社的剧情简介 · · · · · ·

      威尔顿预备学院以其沉稳凝重的教学风格和较高的升学率闻名,作为其毕业班的学生,理想就是升入名校。新学期文学老师约翰·基汀(罗宾·威廉姆斯 饰)的到来如同一阵春风,一反传统名校的严肃刻板。
      基汀带学生们在校史楼内聆听死亡的声音,反思生的意义 ;让男生们在绿茵场上宣读自己的理想;鼓励学生站在课桌上,用新的视角俯瞰世界。老师自由发散式的哲学思维让学生内心产生强烈的共鸣,他们渐渐学会自己思考与求索,勇敢的追问人生的路途,甚至违反门禁,成立死亡诗社,在山洞里击节而歌!

      基汀教授、基汀老师、基汀队长,他的教育宛若春风化雨,润物无声的留在每个人心里… ©豆瓣


    哦,船长,我的船长! (O Captain! My Captain!)

    沃尔特·惠特曼

    O Captain! My Captain! our fearful trip is done;
    The ship has weather'd every rack, the prize we sought is won;
    The port is near, the bells I hear, the people all exulting,
    While follow eyes the steady keel, the vessel grim and daring:
          But O heart! heart! heart!
                O the bleeding drops of red,
                      Where on the deck my Captain lies,
                            Fallen cold and dead.

    哦,船长,我的船长!我们的险恶航程已经告终;
    这船挺过了一切磨难,我们寻求的奖赏已经赢得。
    临近港口,我听见钟声响彻,人群欢呼,
    目迎了这稳稳驶进的船体,这坚强、无畏的船儿。
    可是,哦,我的心、心、心啊!
    哦,点点殷红的血液流滴着,
    在甲板的位置,横卧着我的船长,
    他倒下,冷却,长逝。

    O Captain! My Captain! rise up and hear the bells;
    Rise up—for you the flag is flung—for you the bugle trills;
    For you bouquets and ribbon'd wreaths—for you the shores a-crowding;
    For you they call, the swaying mass, their eager faces turning;
          Here captain! dear father!
                This arm beneath your head;
                      It is some dream that on the deck,
                            You've fallen cold and dead.

    哦,船长,我的船长!起来听这钟声;
    起来!——旗帜为你飘扬——号角为你吹响。
    为你,花束与缎带花圈抛来——为你,岸边人群簇拥。
    为你,人群呼喊、汹涌,转动他们的热切面庞;
    这儿,船长!敬爱的父亲!
    这只手臂给您的头颅枕去;
    有如甲板上的一场梦,
    您倒下,冷却,长逝。

    My Captain does not answer, his lips are pale and still;
    My father does not feel my arm, he has no pulse nor will;
    The ship is anchor'd safe and sound, its voyage closed and done;
    From fearful trip, the victor ship, comes in with object won;
          Exult, O shores, and ring, O bells!
                But I, with mournful tread,
                      Walk the deck my captain lies,
                            Fallen cold and dead.

    我的船长并未作答,他的嘴唇发白,纹丝不动;
    我的父亲感不到我的手臂,他已没有脉搏与意志。
    这船已经安然地抛锚碇泊,这航行也已结束告终。
    自险恶的旅途归来,这胜利之船,带来赢取的战利品;
    欢跃,哦,海岸;轰鸣,哦,大钟!
    可是,我带着悲怆的脚步声,漫步在我船长横卧的甲板上,
    他倒下,冷却,长逝。

    ◎资源下载:百度网盘 提取码: 2333


    参考: