「STORAGE」- 性能提升:调优方法

硬件设备调优
WIP
操作系统调优
WIP
应用程序调优
WIP[……]

READ MORE

「Data Center」- 数据中心(在云计算下)

问题描述
或许规模不同,但企业或家庭都会有自己的数据中心。作为运维人员,我们需要部署和管理这些数据中心;
所以,我们将尝试学习数据中心相关的内容,以及相关技术,以对数据中心及其相关技术形成初步认识;
该笔记将记录:我们将了解数据中心相关内容,诸如硬件环境、虚拟化技术等等,以及相关问题的解决办法;[……]

READ MORE

「VMware ESXi」- 虚拟机冷迁移失败(虚拟磁盘文件位于坏扇区上)

问题描述
使用vSphere Client冷迁移失败,没有显示具体原因。虚拟机启动之后,在虚拟机中收到磁盘错误。猜测是磁盘损坏导致的。
使用ssh命令登录到ESXi中,尝试对.vmdk文件复制,当复制到2/3时(虚拟机迁移也是大约在这时),产生I/O错误。因此更加怀疑存在坏区。
问题排查
目前的情况是这样的:

(1)由于ESXi中没有badblock命令。
(2)虽然由smartd服务,但是我对smart并不是非常熟悉。
(3)另外,也不知道ESXi有没有提供相关的坏块检测功能。

在条件允许的情况下,我们决定脱机处理(从安装到USB的Debian启动,在非ESXi系统中维护)。
初始化环境
从USB启动,进入Linux系统,执行apt-get install vmfs-tools命令。(详细步骤略过)
确定磁盘存在坏块
将U盘插入物理机,启动U盘中的Linux系统,对磁盘运行badblocks(1)命令:

#!/bin/sh

badblocks -v /dev/sda > /mnt/sda-bad-blocks.txt

然后,非常顺利的检测到四个坏块(使用smartmontools检测也显示存在坏块)。坏块被记录在/mnt/sda-bad-blocks.txt文件中。
既然磁盘存在坏块,那如何确定坏块影响了哪些文件呢?
确定坏块值

#!/bin/sh

# 获取文件系统块大小
debugvmfs /dev/sdb1 show # 输出中Block Size为1M大小

badblocks -b 1048576 -v /dev/sdb1 > /mnt/sda-bad-blocks.txt # 进入只读测试,并将坏块结果写入文件。

在运行结束之后,我们检测到一个坏块,621317。这与「检测到四个坏块」并不冲突,因为块大小不同(前者默认1024字节,后者指定1048576字节)。
受坏块影响的文件(未完成)
接下来就是确定受该坏块影响的文件。
底层技术向来复杂……事情是这样的,坏块检测是文件系统无关的,而文件定位是文件系统相关的。所以,不同文件系统要使用不同处理工具(例如,在ext2/ext3/ext4中使用debugfs命令),而ESXi使用VMFS系统,需要使用vmfs-tools中的debugvmfs命令,但是该命令版本过旧,而且手册描述与实际功能不符合。所以,指望不上debugvmfs命令。
而在ESXi中,内置debugfs工具,该工具可以用于调试文件系统,但是我不会用,也没有找到相关手册。
TODO 关于VMFS文件系统的调试方法[……]

READ MORE

「PVE」- Metric Server,指标含义

官方文档并未给出 Metric 的含义(03/09/2023 PVE 7.3),我们需要通过其他手段来获取相关信息: 1)分析 pvestatd 源码:git.proxmox.com Git – pve-manager.git/blob – PVE/Service/pvestatd.pm
指标分类
通过 Flux 查询,确定其中包含的指标(Measurement):

// ——————————————————– // 查看全部 Measurement 指标;

import “influxdata/influxdb/schema”
schema.measurements(bucket: “pve-metric-server”)

ballooninfo ———————————————– // 包含 Host 指标,部分指标与 Guest 相关;
proxmox-support ——————————————- // 包含 Host 指标,部分指标与 Guest 相关;
system —————————————————- // 包含 Host 指标,部分指标与 Guest 相关;
blockstat ————————————————- // 包含 Host 指标,部分指标与 Guest 相关;
nics —————————————————— // 包含 Host 指标,部分指标与 Guest 相关;
cpustat ————————————————— // 仅包含 Host 指标;
memory —————————————————- // 仅包含 Host 指标;

// ——————————————————– //

import “influxdata/influxdb/schema”
schema.measurementTagKeys(
bucket: “pve-metric-server”,
measurement: “proxmox-support”,
)

import “influxdata/influxdb[……]

READ MORE

「Learning」- 我们的目标与我们的方向

需求层次结构(Hierarchy of Needs)
马斯洛需求层次理论_百度百科
马斯洛(1943 年,1954 年)的五阶段模型已经扩大为八阶,包括认知和审美需求(马斯洛,1970a)和后来的超越需求(马斯洛,1970b);
生理的需要(physiological need):食物、水分、空气、睡眠、性的需要等。它们在人的需要中最重要,最有力量;
安全需要(safety need):人们需要稳定、安全、受到保护、有秩序、能免除恐惧和焦虑等;
归属和爱的需要(belongingness and love need):一个人要求与其他人建立感情的联系或关系。例子:结交朋友、追求爱情;
尊重的需要(esteem need):马斯洛分为两类:(一)尊重自己(尊严、成就、掌握、独立)和(二)对他人的名誉或尊重(例如地位、威望);
认知需求(Cognitive needs)- 知识和理解、好奇心、探索、意义和可预测性需求。(马斯洛,1970a)
审美需求(Aesthetic needs)- 欣赏和寻找美,平衡,形式等。(马斯洛,1970a)
自我实现的需要(self-actualization need):人们追求实现自己的能力或者潜能,并使之完善化;
超越需要(Transcendence needs):一个人的动机是超越个人自我的价值观
Objectives and Key Results
我们需要确定发展目标(Objectives),然后便能通过目标来确定方向(Key Results),其实是指我们要如何走向以后要深耕的领域;
解决方案
简单来说就是 —— 学什么,怎么学
学什么(What,我们所选择的学科方向)
我们目前(08/14/2022)依旧对理学与工学较有兴趣,而其他学科知识则作为补充知识: 1)理学,中国高等教育中重要的学科门类,是研究物质世界基本规律的科学;
数学,其属于理学; 物理学,其属于理学;
计算机应用程序 => 高级语言 => 汇编语言 => 指令集 => 逻辑电路 => 晶体管 => 物理 / 数学
鉴于生存是第一位的,而直接转到最终技术方向会影响生存,所以我们会逐步过渡(追寻)到我们的最终目的;
# 01/08/2023 我们知道(大致)我们要走技术路线(向底层发展),也清楚(大致)向底层进发的各个层次,但是我们并不知道自己最终要走到哪里;
数学:
物理:
半导体:

知乎/我想进入半导体,大学需要学什么专业,需要读到什么程度合适?
最贴切的方向(仅从专业名称)
最对口的应该是电子、微电子、计算机专业,[……]

READ MORE

「Learning」- the Remaining Days of Life

[……]

READ MORE

「Learning」- 时间管理

_TIME_
Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
_DESC_

00:00 – 08:00
Sleep
Sleep
Sleep
Sleep
Sleep
Sleep
Sleep
 

08:00 – 09:30
Pre-work
Pre-work
Pre-work
Pre-work
Pre-work
Pre-work
Pre-work
 

09:30 – 12:00
Working
for Work
for Work
for Work
for Work
for Work
Working
 

12:00 – 13:00
Lunchtime
Lunchtime
Lunchtime
Lunchtime
Lunchtime
Lunchtime
Lunchtime
 

13:00 – 18:30
Working
Working
Working
Working
Working
Working
Working
 

18:30 – 20:00
Exercise
Exercise
Exercise
Exercise
Exercise
Exercise
Exercise
 

20:00 – 23:00
Learning
Learning
Learning
Learning
Learning
Learning
Learning
 

23:00 – 24:00
Pre-sleep
Pre-sleep
Pre-sleep
Pre-sleep
Pre-sleep
Pre-sleep
Pre-sle[……]

READ MORE

「Learning」- 每日任务

工作 学习 锻炼[……]

READ MORE

「Learning」- 知识等级

知识结构

A0:是核心知识(L0),即我们需要掌握的核心领域; Lx:是相关知识(L1),用于支撑我们对 A0 的把握; Mx:是周边知识(L2),起到辅助与支架作用; Wx:是外围知识(L3),属于工具系列,了解知晓即可;
知识的熟练度(深度)
初级:学习使用/解决问题 中级:理解架构/掌握原理 高级:扩展延伸/发展改进
补充说明:该部分表述的是学习知识所要掌握的程度,而非学习路线;

针对外围知识的学习(L3)
知识特征

该”服务软件“指我们在计算机行业中应用到的程序(诸如各种桌面软件、需要部署的服务等等);
该类型的知识内容属于工具类别(即其用于辅助我们解决其他重要问题),属于外围知识,无需甚解;

例如:在我们的工作场景中,Maven 对于我们来说仅是个构建工具,能用来完成项目构建管理即可,而无需学习全部特性,更不需要进行源码级学习;

学习内容

我们的主要学习方法是参照官方文档:
1)兴趣内的内容:提取并进行笔记,以便快速查阅,并围绕这些内容记录相关实践经验;
2)兴趣外的内容:仅进行简单阅读。在后续的使用过程中,我们井再进一步研读和探索;

句式:该部分的主要内容均来自于官方文档,但是提取出在各章节中我们关注的内容,让我们形成对 xxx 的整体认识;

学习方法

在阅读正式文档前:
1)理解功能特性,其所解决的问题、基本概念术语,能完成基本操作;
2)快速运行服务(测试环境、实验环境);

在阅读正式文档时:
1)以章节为单位,快速阅读官方文档或相关书籍,并进行重点标记(标记感兴趣的内容);
2)当章节结束后,将标记的重点整理到笔记中;

在阅读正式文档后:
1)回到我们最开始的问题,指导解决问题;
2)在笔记中,整理并记录我们的解决方案;

Q:为什么在阅读文档之前要形成对被研究对象的认识和理解?
A:在我们的实践过程中,我们发现,当对被研究对象有了基本认识之后,再阅读相关的学习资料反而更容易理解。或者这没有普适性,但是对于我们来说确实有效;[……]

READ MORE

「K4NZ-NOTE」- About This Notebook(¯\_(ツ)_/¯)

关于内容
该笔记是我们的技术杂记,该站点文章是对我们工作笔记的分享: 1)部分内容比较详细:是对我们工作内容及过程的梳理,以方便日后的查阅和使用; 2)部分内容比较粗浅:是对某些特定技术的简单了解以及简记(甚至会存在错误); 3)部分内容仅是思路:是某些问题的解决思路,或是我们针对问题的某些奇怪想法;
关于我们
k4nzdroid(c0p8, kc2lp8) 资深 Linux 菜鸡;职业 Linux 劝退; E-MAIL: k4nz@d3rm.org WECHAT:
最近更新的笔记
2022/12/12 17:03 「HDD」- 磁盘的物理结构[……]

READ MORE

「Learning」- 站点历史

结构内容历史
结构变更历史,能反映出我们专业选择与职业发展的变化过程;
2014-05-dd 技术速记
注,具体时间已无从考究,该时间仅是个大致的时间点;
早期,我们仅是记录一些工作笔记,按照特定技术来分类,每个分类下仅包含该技术相关的内容。诸如「Linux 的安装、使用、配置」、「Java Android PHP 编程语言的学习笔记」等等;
2017-07-dd 知识结构
注,具体时间已无从考究,该时间仅是个大致的时间点;
后来,鉴于工作需要,我们接触的内容也逐渐增多,所以逐渐按照技术专题来分类,每个分类下包含特定技术相关的内容。诸如 DevOps、Linux SA、DBMS、Computer Network 等等;
2023-01-20 成长记录
我们开始尝试新的分类方式,这份笔记也逐渐演变成我们的成长记录;
以往,我们是以职业为入手点,根据职业所需技能来分类(并管理)我们的知识;
现在,我们尝试淡化职业的概念(原因在于,职业是在发展变化的,新旧更迭,没有哪个职业是能够长盛不衰),尝试从教育体系专业的角度,并结合我们的发展方向,来分类管理知识(职业也许会消失,但其所依赖的专业知识并不会快速消失);
# 01/28/2023 后来,我们了解到行业具有其相关的特定知识,这些知识并不一定会出现在专业中,所以我们也将尝试从行业的角度,并结合工作内容,来分类管理知识;
笔记管理历史
2014-05-dd
注,具体时间已无从考究,该时间仅是个大致的时间点;
早期,通过 TXT 记录
2018-04-dd
注,具体时间已无从考究,该时间仅是个大致的时间点;
我们开始通过 zim wiki desktop 进行记录,并导出 HTML 文件来共享笔记内容;
后来,鉴于 HTML 的 SEO 效果不好(搜索引擎收录),所以我们开始通过 Jenkins Pipeline 发布到 Wordpress 站点;[……]

READ MORE

「K4NZ-NOTE」- 笔记规范

概念术语
导论、概论、通论
导论、通论、概论有什么区别? – 知乎
导论是介绍,概论是分析,通论是研究: 1)导论是介绍一个新兴的、初创的、有争议的学说、体系; 2)概论是梗概一个初步完善、或完善的新的或旧的学说、体系; 3)通论是对一个庞大的、新的或旧的体系,通中有精、画龙点睛、充要分明(充分条件必要条件)的对比论述;
为什么调整分类?
因为我们希望能快速地找到所需要的笔记;
(分类)根目录索引

类型
等级
描述

00.INDEX
 
最近更新的文章,这是笔记的一个简单介绍页面。(用 Python 脚本生成)

# 基础知识 #
01-05
底层技术及基本知识。比如网络知识,编程语言,操作系统,硬件知识等等。

# 技术应用 #
 
基础技术的应用。比如容器技术,爬虫技术,数据库技术,软件工程等等。

# 管理方法 #
 
软件工程是一个例子。它用到了某些技术,但是更多的是一些管理方法相关的内容。

z.All Uncategorized Articles…
 
未分类的杂记

该分类的划分依照是「我个人对各种技术关注度」,并不是标准,每个人都可以自己的分类喜好。与软件应用相比,我更喜欢计算机技术,更喜欢研究硬件、操作系统、网络、算法等等基础技术。应用技术,比如软件开发、监控、数据库、容器等等,变化块、投入产出比相对较低、依赖于基础技术,也只是为了解决问题才学习。当然,每种技术,不管是发明它,还是学习它,都是为了解决某个问题;
(分类)专题目录索引
# Category Name(Introduction) – 标题页面包含了最开始的简单介绍及基本原理组件,用于辅助安装部署;
# 1.Concepts and Architecture

– 使用方法及基础概念;

# 2.Installation
# 3.Administration and Configuration

– 完成某些特定操作;
– 服务的管理与配置(与服务相关);

# 4.Security
# 5.Performance
# 6.Logging and Monitoring
# 7.Cluster and High availability
# 8.Bac[……]

READ MORE

「AI」- 工具箱

awesome-chatgpt/README.zh-cn.md at main · OpenMindClub/awesome-chatgpt
microsoft/visual-chatgpt: Official repo for the paper: Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Models
Lunabot – ChatGPT on any webpages
https://chrome.google.com/webstore/detail/lunabot-chatgpt-on-any-we/jkeolmadidncndcbnajhaojepbolajag
软件开发领域
1)生成 Commit log,这是 ChatGPT 的强项,它能够快速理解逻辑和代码,通过 diff 归纳出概要,开源的工具有:https://github.com/zurawiki/gptcommit%E2%80%A6
2)生成测试用例,团队内实践下来效果相当好。虽然 Copilot 和 Tabnine 等产品在代码自动补全方面已经表现不错,但相较于 https://codeium.com 和 https://cursor.so 这些能够使用自然语言生成代码的体验,还是稍逊一筹。之所以不生成业务代码,是因为生成业务代码需要理解产品逻辑,而编写单元测试只需理解一个函数。
3)生成 API 文档和代码注释,ChatGPT 可以通过阅读代码,理解函数的输入、输出、功能以及用途,然后生成相应的 API 文档和注释,开源的工具:https://github.com/awekrx/AutoDoc-ChatGPT%E2%80%A6
4)生成 SQL,已经看到 PingCAP 发布了相关产品 chat2query,https://pingcap.com/chat2query-an-innovative-ai-powered-sql-generator-for-faster-insights/%E2%80%A6%EF%BC%8C%E5%AF%B9%E5%85%AC%E5%8F%B8%E4%BA%A7%E5%93%81%E3%80%81%E8%BF%90%E8%90%A5%E7%AD%89%E6%9C%89%E6%95%B0%E6%8D%AE%E9%9C%80%E6%B1%82%E4%BD%86%E4%B8%8D%E6%87%82%E6%95%B0%E6%8A%80%E6%9C%AF%E7%9A%84%E5%B2%97%E4%BD%8D%E9%9D%9E%E5%B8%B8%E5%8F%8B%E5%A5%BD%E3%80%82
5)自动代码[……]

READ MORE

「Windows」- 包管理系统,Windows 包管理工具,Windows Package Manager

Scoop
https://scoop.sh/ https://github.com/lukesampson/scoop
Chocolatey
https://chocolatey.org/ https://github.com/chocolatey/choco
WinGet

章节列表
「WinGet」- Windows 包管理工具,Windows Package Manager[……]

READ MORE

「WinGet」- Windows 包管理工具,Windows Package Manager

问题描述
该笔记将记录:在 Windows 中,如何使用 WinGet 安装和管理包。
解决方案
Windows Package Manager CLI (aka winget)
安装方法
两种安装方法,参考 Installing the client 部分: 1)Microsoft Store [Recommended] 2)Manually(我们从 Release 中下载,并手动安装)[……]

READ MORE

「LINUX」- GRUB

GNU GRUB(GRand Unified Bootloader简称“GRUB”)是一个来自GNU项目的多操作系统启动程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。
GRUB 是 Linux 广泛使用的引导加载程序,所以该部分笔记将以学习和使用 GRUB 相关的内容;[……]

READ MORE

「GRUB」- 安装

在多数通常下,我们不需要安装 GRUB 程序(因为 Linux 发行版会自带),反而升级场景较多;
但是仍有小部分场景需要我们安装,因此本笔记将记录如何安装 GRUB 引导加载程序;
Kali GNU/Linux Rolling

# 仅安装 GRUB 程序
apt-get install grub-common grub-pc grub-pc-bin grub2 grub2-common

# 安装文档包,包含了 grub 的相关文档
apt-get install grub-doc grub-legacy-doc

方法二、源码编译安装
参考 LFS/GRUB-2.02~beta3
安装的程序列表
grub-bios-setup Is a helper program for grub-install
grub-editenv A tool to edit the environment block
grub-file Checks if FILE is of the specified type.
grub-fstest Tool to debug the filesystem driver
grub-glue-efi Processes ia32 and amd64 EFI images and glues them according to Apple format.
grub-install Install GRUB on your drive
grub-kbdcomp Script that converts an xkb layout into one recognized by GRUB
grub-macbless Mac-style bless on HFS or HFS+ files
grub-menulst2cfg Converts a GRUB Legacy menu.lst into a grub.cfg for use with GRUB 2
grub-mkconfig Generate a grub config file
grub-mkimage Make a bootable image of GRUB
grub-mklayout Generates a GRUB keyboard layout file
grub-mknetdir Prepares a GRUB netboot directory
grub-mkpasswd-pbkdf2 Generates an encrypted PBKDF2 password for use in the boot menu[……]

READ MORE

「GRUB」- 杂记

iso-scan/filename?
Is there documentation for iso-scan/filename?
Boot Info Script
GitHub/arvidjaar/bootinfoscript
项目地址
https://github.com/arvidjaar/bootinfoscript
脚本功能
用于显示系统引导相关的信息
注意事项
在使用该工具之前,首先 要知道系统使用的引导加载程序 以及 该引导加载程序是如何引导系统的 ,否则会无法理解该工具的输出。[……]

READ MORE

「GRUB」- 修改控制台的分辨率

解决方案
主流发行版
很多主流发行版已集成 GRUB 配置工具,这些配工具通过读取配置文件(/etc/default/grub),来创建 /boot/grub/grub.cfg 文件。所以,不建议修改 /boot/grub/grub.cfg 文件,建议修改 /etc/default/grub 配置,然后通过 update-grub 创建 /boot/grub/grub.cfg 配置文件。
首先,向 /etc/default/grub 中,加入如下两行:

# 我们要使用的分辨率
GRUB_GFXMODE=1024x768x32
GRUB_GFXPAYLOAD_LINUX=keep

然后,执行 update-grub 命令。
特殊发行版
或者,在 /boot/grub/grub.cfg 中加入

set gfsmode=1024x768x32
set gfspayload=keep

补充说明
关于 GRUB_GFXMODE 取值
How to safely change grub2 screen resolution? – Ask Ubuntu
该环境变量并非随意取值,我们需要确定硬件支持的显示模式: 1)或,在系统启动时,在 GRUB 菜单页面中,按 c 键,进入 GRUB 命令行模式,执行 videoinfo 查看支持的显示模式。 2)或,hwinfo –framebuffer,查看当前支持的显示模式;
参考文献
Debian console size in VirtualBox GNU GRUB Manual 2.06: videoinfo How to safely change grub2 screen resolution? – Ask Ubuntu[……]

READ MORE

「GRUB」- 修改字体

GRUB使用的字体是PFF2字体,字体的扩展名为.pf2
字体文件的位置为:
如何修改字体?
系统环境:Debian 8
编辑/etc/default/grub文件,加入如下内容:

GRUB_FONT=/boot/grub/fonts/m.pf2

其中,/boot/grub/fonts/m.pf2为字体文件的路径。然后运行update-grub命令。
或者,修改/boot/grub/grub.cfg文件,加入如下行:

loadfont /boot/grub/fonts/m.pf2

推荐使用修改/etc/default/grub文件的方法。
如何制作PFF2字体?
系统环境:Debian 8
如果对于发行版默认提供的PFF2字体不满意,可以使用grub-mkfont命令(属于grub-common软件包),使用TTF字体生成PFF2字体。命令如下:

#!/bin/sh

grub-mkfont -s 14 -o /boot/grub/fonts/m.pf2 \
/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf

# 参数/boot/grub/fonts/m.pf2为字体文件的输出路径
# 参数/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf为TTF字体文件的路径

参考文献
Can GRUB font size be customised?[……]

READ MORE

「GRUB」- 加载模块

问题描述
部分系统或者引导目录(/boot)安装在 LVM 分区中,需要配置 GRUB 识别 LVM 分区。
本文将介绍如何配置 GRUB 以支持 LVM 分区。
方法一、使用环境变量(推荐)
修改 /etc/default/grub 或者 /etc/default/grub.d/foo.cnf 的 GRUB_PRELOAD_MODULES 环境变量:

GRUB_PRELOAD_MODULES=”lvm”

方法二、修改 grub.cfg 配置(反对)
强烈反对使用该方法调整 GRUB 配置,因为多数发行版使用 update-grub 配置 grub.cfg 文件。如果直接配置 grub.cfg 文件,可能会导致配置文件被覆盖(因为某些软件包的安装会执行 update-grub 命令)。
当然,我们仍有部分场景需要手动配置。配置示例如下,将 insmod 添加到 menuentry 内即可:

menuentry ‘DEBIAN GNU/Linux’ {
load_video

insmod gzio
insmod part_gpt
insmod lvm
insmod ext2

set root=’lvmid/xxxxx/xxxxx’
linux /boot/vmlinuz root=/dev/mapper/os ro
initrd /boot/initrd.img
}[……]

READ MORE

「Grub」- 手动引导启动

问题描述
当操作开机启动后,在进入 GRUB 菜单时,按 c 键,能够进入 GRUB 的命令行模式。当终端显示 grub> 提示符时,表示已经进入命令模式。
当进入命令模式后(普通场景)

### #1 查看所有分区
grub> ls

### #2 查看分区下的内容
grub> ls (hd0,1)/

### #3 设置根分区及启动盘
grub> set root=(hd0,1)
grub> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1
grub> initrd /boot/initrd.img-3.13.0-29-generic
grub> boot

# 「普通场景」:这里的普通场景指的是「BIOS」+「MBR」+「普通的磁盘分区」,没有使用RAID和LVM等等技术。

如果处于救援模式
如果你进入了救援模式,那执行的命令会有所不同。此时的命令提示符为grub rescue>,表示救援模式:

grub rescue> set prefix=(hd0,1)/boot/grub
grub rescue> set root=(hd0,1)
grub rescue> insmod normal
grub rescue> normal
grub rescue> insmod linux

# 后面的步骤就是前面一样了
grub rescue> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1
grub rescue> initrd /boot/initrd.img-3.13.0-29-generic
grub rescue> boot

如果系统进入救援模式,那通常是没有找到/boot/grub/目录。可能还有其他原因,具体情况要具体分析。
修复系统引导
当进入系统后,第一件事情是修复引导:

update-grub

如果你的系统是GPT分区表,在引导修复的时候需要进行一些不同的操作。
通过 chroot 修复
boot – How do I run update-grub from a LiveCD? – Ask Ubuntu

mount /dev/sda5 /mnt

mount –bind /dev /mnt/dev
mount –bind /sys /mnt/sys
mount –bind /proc /mnt/proc

mount /dev/sdaX /mnt/boot[……]

READ MORE

「GRUB」- 常见问题处理

出现 error:unknown filesystem grub rescue 解决办法
http://blog.csdn.net/wangyuchen890119/article/details/7338022
…attempt to read or write outside of disk…
grub error: attempt to read or write outside of disk ‘hd0’ – Unix & Linux Stack Exchange What to do when I get an “attempt to read or write outside of disk ‘hd0′” error and …
问题描述
在我们的硬件中,安装 OpenMediaVault 6 完成,然后当启动系统时出现该问题; 随后,我们尝试在该硬件环境中部署 Ubuntu 20.04 LTS 版本,依旧会出现该问题;
原因分析
我们还未找到具体原因,但是在如下文章中找到解决问题的办法: 1)What to do when I get an “attempt to read or write outside of disk ‘hd0′” error … 2)grub2 – What’s the maximum disk size GRUB can use? – Unix & Linux Stack Exchange
我们猜测是因为我们的硬盘太大,导致 GRUB 无法正常工作,或者触发某些 GRUB 的 BUG;
解决方案
1)首先,完成系统安装,此时启动会显示 grub rescue> 提示符,所以关系; 2)然后,在该主机上启动其他 Linux 系统进行修复:即对磁盘进行调整,创建独立的 /boot 分区; 3)然后,通过其他 Linux 系统来手动引导进入 OMV 系统; 4)最后,重新安装引导进行解决(grub-install…update-grub);[……]

READ MORE

「GRUB」- Begin: Running /scripts/local-block … done

问题描述
系统启动是,多次提示:

Begin: Running /scripts/local-block … done.

但是并没有一直卡在那里不动,过了一段时间后系统又启动了;
原因分析
在我们的场景中,导致该问题的原因是:休眠恢复所需要读取的设备不存在。这实际上并不是 GRUB 的问题,而是 initramfs 的问题;
在我们系统中,休眠是写入 SWAP 分区的。但是更换硬盘,新盘中没有配置 SWAP 分区,而系统又是从旧盘里直接复制(rsync)过来的,所有配置是之前的配置;
所以这里要调整一下;
解决方案
解决方法有很多种: 1)先暂时取消掉休眠; 2)或者,配置以下交换分区;
鉴于我们暂时不打算配置交换分区,所以便取消休眠: 1)修改 /etc/initramfs-tools/conf.d/resume 文件,注释启动的休眠设置(# RESUME=xxxx), 2)然后更新 initramfs 文件(update-initramfs -u -k all); 3)最后,重启系统验证修改即可;
参考文献
{Begin: Running /scripts/local-block … done, stuck in initramfs} on Ubuntu 17.10 startup How to solve the Running /scripts/local-block loop while booting in linux Solving the Running /scripts/local-block loop while booting in linux – IT Tips and Tricks[……]

READ MORE

「获取Debian的安全更新」

参考文献
https://askubuntu.com/questions/194/how-can-i-install-just-security-updates-from-the-command-line https://debian-administration.org/article/241/Getting_Debian_Security_Updates https://serverfault.com/questions/424486/how-to-get-a-list-of-security-updates-on-the-command-line-in-debian-ubuntu https://www.debian.org/doc/manuals/securing-debian-howto/ch4.en.html#s-security-update https://lists.debian.org/debian-security-announce/[……]

READ MORE

「Kali Linux」- 使用旧源

问题描述
较新版本的 Kali Linux Rolling 中已经移除了某些包,比如 php5 包。
解决方案
如果我们要安装旧版本的包,可以添加old.kali.org源:

echo ‘deb http://old.kali.org/kali sana main non-free contrib’ >> /etc/apt/sources.list
apt-get update

安装php5:

apt-cache search php5

最后,从/etc/apt/sources.list中移除旧源:

sed -i ‘/deb http:\/\/old.kali.org\/kali sana main non-free contrib/d’ /etc/apt/sources.list
apt-get update

参考文献
Kali sources.list Repositories[……]

READ MORE

「APT」- 临时禁用仓库

问题描述
在执行 apt-get update 命令时,某些仓库的下载速度比较慢,并且也没有必要更新。
因此我们希望可以临时禁用这些仓库,在需要时再次打开。
该笔记将记录:如何临时禁用 APT 仓库(源),以及需要注意的一些问题。
解决方案
有以下几种方法可以临时禁用仓库: 1)修改 .list 文件,使用井号注释仓库; 2)重命名 .list 文件(仓库源配置文件);
目前(07/10/2019),只能这样做,毕竟 APT 没有像 YUM 那种启动和禁用源的功能。
方法一、修改 .list 文件
1)使用 vim 打开 /etc/apt/source.list 文件; 2)在仓库地址前,添加井号(#)注释仓库即可;
如果每个源文件单独保存在 /etc/apt/source.list.d/ 中,则修改对应的文件即可。
方法二、重命名 .list 文件
该方法相对于前者,更加便捷。但是仅适用于每个仓库当读配置的场景(使用 /etc/apt/source.list.d/ 保存)
不同仓库的配置都保存在 /etc/apt/source.list.d/ 中单独存放的,并且 APT 只能识别以 .list 结尾的仓库源配置文件。因此,可以通过重命名源文件实现:

mv /etc/apt/sources.list.d/foo.list{,.delete}

关于重命名的问题
通过重命名方法存在问题,由于 APT 无法识别 .delete 后缀,因此会产生如下错误:

N: Ignoring file ‘foo.list.delete’ in directory ‘/etc/apt/sources.list.d/’ as it has an invalid filename extension

解决方法是,创建如下配置文件,忽略 .delete 后缀的文件:

#!/bin/sh

cat >> /etc/apt/apt.conf.d/98ignore-extensions << EOF
Dir::Ignore-Files-Silently:: “\.delete$”;
EOF

# 默认值为:.disabled, ~, .bak or .dpkg-[a-z]+
# 即,可以将文件重命名为这些后缀以禁用文件。

参考文献
How to temporarily disable and permanently disable repos in Debian based systems? How to name files in /etc/apt/sources.list.d/ to be i[……]

READ MORE

「APT」- 获取构建 deb 包的编译选项(configure)

问题描述
我们需要插件软件包的编译选项,以排查某些问题。
该笔记将记录:如何查看某些软件包的编译选项。
解决方案
系统环境:Kali GNU/Linux Rolling
1)配置deb的源码源,添加 deb-src 到 source.list 中:

deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib

2)更新缓存,执行如下命令:

apt-get update

3)下载源码包,并查看配置:

apt-get download asterisk

# 查看下载的源码目录下的debian/rules文件,该文件包含了源码构建的configure参数。

参考文献
Where can I find the configure options used to build a package?[……]

READ MORE

「macOS」- 安装、升级

镜像下载
https://archive.org/details/macOS-Catalina-IOS[……]

READ MORE

「DSA」- 数据结构与算法(DSA,Data Structures and Algorithms)

麦克劳林公式 EMA (指数移动平均值)
Bubble Sort Algorithm
算法与数据结构相关的学习资料
《数据结构与算法分析:C 语言描述》/ 9787111621959
Data Structure and Algorithms Tutorial – Tutorialspoint
参考文献
DSA Definition: Data Structures and Algorithms | Abbreviation Finder[……]

READ MORE