分类: 未分类

  • macOS 禁止在 SMB 共享上创建 .DS_Store 文件

    macOS 禁止在 SMB 共享上创建 .DS_Store 文件

    命令:

    defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool TRUE

    执行命令后,重启电脑生效

    作用:

    • 防止在网络共享文件夹中生成 .DS_Store 文件,保持文件夹整洁。
    • 避免将 macOS 特有的文件传播到其他操作系统,例如 Windows 或 Linux。
    • 减少网络共享上的不必要数据,从而节省存储空间和带宽。

    还原操作:

    要恢复默认设置,允许 macOS 在网络共享上创建 .DS_Store 文件,请在终端中执行以下命令:

    命令:

    defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool FALSE

    执行命令后,重启电脑生效

  • 使用Docker部署ONLYOFFICE 社区版文档服务器

    ONLYOFFICE 文档服务器是一款在线办公套件,包含文本、电子表格和演示文稿的查看器和编辑器,完全兼容 Office Open XML 格式:.docx、.xlsx、.pptx,并支持实时协作编辑。

    主要特点:

    • 实时协作:支持多人同时编辑同一个文档,提升团队协作效率。
    • 多种格式支持:兼容主流 Office 格式(如 .docx.xlsx.pptx),无缝处理不同类型的文件。
    • 跨平台支持:适用于 Windows、Linux、macOS 等多平台,方便部署和使用。
    • 高效文档管理:提供强大的文档查看、编辑、共享功能,适用于个人及小型团队使用。

    1. 克隆 ONLYOFFICE 社区版仓库

    首先,打开终端并克隆 ONLYOFFICE 的社区版 Docker 配置库:

    git clone https://github.com/ONLYOFFICE/Docker-CommunityServer

    2. 进入项目目录

    克隆完成后,进入项目目录:

    cd Docker-CommunityServer

    3. 启动 Docker 容器

    使用 docker-compose 启动 ONLYOFFICE 社区版文档服务器:

    docker-compose -f docker-compose.workspace.yml up -d

    4. 配置访问

    部署完成后,你可以通过访问服务器的 IP 地址或域名来使用 ONLYOFFICE 文档服务器。默认端口为 80,你可以在浏览器中输入服务器地址,例如:

    http://<服务器IP地址>/
  • 迁移 Ubuntu 24.04 系统从 VMware虚拟化迁移到 KVM 虚拟化

    当我们将虚拟机从 VMware 环境迁移到 KVM 虚拟化平台时,虽然系统能够成功启动,但可能会出现无法联网的情况。解决迁移 Ubuntu 24.04 系统从 VMware 到 KVM,无法获取IP导致没有网络的问题

    1. 迁移前的准备

    在迁移之前,需要做好以下准备工作:

    • 备份虚拟机:为了防止意外丢失数据,首先应该备份虚拟机。
    • 安装 QEMU-Guest-Agent:QEMU-Guest-Agent 是 KVM 环境中必要的工具,它能增强虚拟机和宿主机之间的交互,例如提供更好的网络性能和电源管理。 安装命令如下:
    sudo apt update
    sudo apt install qemu-guest-agent

    2. 虚拟机迁移操作

    迁移过程中,可以使用如下两种方法之一进行迁移:

    • 迁移虚拟磁盘:通过将 VMware 虚拟机的虚拟磁盘(通常为 .vmdk 文件)转换为 KVM 支持的格式(如 .qcow2.raw 格式)。

    可以使用 qemu-img 工具进行格式转换:

    qemu-img convert -f vmdk -O qcow2 vmware_disk.vmdk kvm_disk.qcow2
    • 直接导出并导入虚拟机:导出 VMware 虚拟机的配置并导入到 KVM 中,使用 KVM 的虚拟机管理工具如 virt-managervirsh 进行虚拟机的创建和配置。

    3. 启动虚拟机并验证迁移

    完成迁移后,启动虚拟机,确保虚拟机能够成功启动并进入系统。此时,我们会发现虚拟机能够正常启动,但有时候会出现无法联网的情况。

    网络问题分析

    在迁移完成后,我们的 Ubuntu 24.04 系统成功启动,但无法连接到网络。执行 ip a 命令时,虚拟机没有分配到 IP 地址,且网络接口无法连接。经过排查,发现问题的根本原因在于虚拟机的网络接口名称发生了变化。

    VMware 与 KVM 中的网卡名称差异

    在不同的虚拟化平台中,网络接口的命名规则是不同的:

    • VMware 中,网卡设备名通常是 ens33 或类似的名称。
    • KVM 中,网卡名称可能变为 ens3eth0 或其他类似的格式。

    在迁移过程中,由于底层虚拟化平台的差异,网卡名称发生了变化,而系统中的网络配置文件仍然使用的是旧的设备名称,导致虚拟机无法正确连接到网络。

    排查步骤

    1. 查看实际网卡名称

    通过执行 ip a 命令查看系统中的实际网卡名称。该命令输出中显示网卡名称为 ens3,而不是 VMware 中的 ens33

    ip a
    1. 检查 Netplan 配置文件

    Netplan 是 Ubuntu 系统中用于网络配置的工具。我们需要检查 Netplan 配置文件,确认是否仍然使用旧的设备名称。

    cat /etc/netplan/50-cloud-init.yaml

    如果文件中仍然使用的是旧的 ens33,而实际的设备名称是 ens3,这将导致无法应用正确的网络配置。

    解决方法

    为了修复这个网络问题,只需将 Netplan 配置文件中的网卡名称从 ens33 更改为实际的 ens3,然后重新应用网络配置即可。

    步骤 1:编辑 Netplan 配置文件

    打开 Netplan 配置文件进行编辑:

    sudo nano /etc/netplan/50-cloud-init.yaml

    将原配置:

    network:
      version: 2
      ethernets:
        ens33:
          dhcp4: true

    修改为:

    network:
      version: 2
      ethernets:
        ens3:
          dhcp4: true

    步骤 2:应用新的网络配置

    保存并关闭文件后,应用新的网络配置:

    sudo netplan apply

    步骤 3:检查网络是否恢复

    重新执行 ip a 命令,检查网络接口是否已成功获取到 IP 地址:

    ip a

    您应该可以看到 ens3 接口已成功获取到 IP 地址,网络恢复正常。

  • Ubuntu24.04在本地搭建 Kubernetes 开发环境:Docker、Minikube 和 kubectl 安装与配置指南

    如何在本地环境中通过 Docker、Minikube 和 kubectl 构建一个 Kubernetes 集群。Kubernetes 是目前主流的容器编排平台,而 Minikube 提供了一个轻量级的本地集群环境,方便开发者和学习者进行实验和测试。

    1. 安装 Docker

    首先,您需要在系统中安装 Docker。运行以下命令以下载并安装 Docker:

    # 安装 Docker
    curl -fsSL https://get.docker.com -o get-docker.sh
    sudo sh get-docker.sh

    安装完成后,将普通用户添加到 docker 用户组中,以便无需使用 sudo 来运行 Docker 命令:

    # 配置普通用户加入到 docker 用户组
    sudo usermod -aG docker $USER

    执行以上命令后,您需要退出并重新登录才能使更改生效。

    2. 安装 Minikube

    Minikube 是用于在本地启动 Kubernetes 集群的工具。运行以下命令以安装 Minikube:

    curl -LO https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-amd64
    sudo install minikube-linux-amd64 /usr/local/bin/minikube && rm minikube-linux-amd64
    
    minikube version

    3. 安装 kubectl

    1. 更新系统软件包列表,并安装必要的依赖:
    sudo apt-get update
    sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
    1. 添加 Kubernetes 的 APT 仓库 GPG 密钥:
    curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
    sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg
    1. 配置 Kubernetes APT 仓库源:
    echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
    sudo chmod 644 /etc/apt/sources.list.d/kubernetes.list
    1. 更新软件包列表并安装 kubectl
    sudo apt-get update
    sudo apt-get install -y kubectl

    4. 启动 Minikube

    安装完成后,启动 Minikube 集群:

    minikube start --driver=docker

    5. 验证安装

    使用以下命令检查 Minikube 和 kubectl 的状态:

    minikube status
    kubectl get nodes

    如果输出显示集群状态正常,Minikube 已成功启动。

    6. 常用 kubectl 命令

    • 查看所有命名空间中的所有 Pod:
    kubectl get pods --all-namespaces
    • 查看默认命名空间中的所有 Pod:
    kubectl get pods
    • 查看服务:
    kubectl get services
    • 查看集群节点:
    kubectl get nodes
    • 查看所有 Deployments:
    kubectl get deployments
    • 查看资源使用情况(如节点的 CPU、内存等):
    kubectl top nodes
    • 删除一个 Pod:
    kubectl delete pod <pod-name>
    • 启动一个新的 Pod(如运行一个 nginx 容器):
    kubectl run nginx --image=nginx

    7. 访问 Kubernetes Dashboard(可选)

    如果您想进行可视化管理,可以访问 Kubernetes Dashboard:

    minikube dashboard

    8. 测试 Nginx 部署

    1. 创建一个 Nginx 部署:
    kubectl create deployment nginx --image=nginx
    1. 将 Nginx 部署暴露到集群外部:
    kubectl expose pod nginx --type=NodePort --name=nginx-service --port=80
    1. 查看服务的端口分配:
    kubectl get services
    1. 获取 Minikube 的 IP 地址:
    minikube ip
    1. 使用浏览器测试 Nginx 服务:
    curl http://<IP>:<端口>

    9. 临时暴露端口供其他人访问,使用 kubectl port-forward 访问 Nginx

    1. 确保 Nginx Pod 正在运行:
    kubectl create deployment nginx --image=nginx
    1. 查找 Nginx Pod 的名称:
    kubectl get pods -l app=nginx
    1. 使用 kubectl port-forward 进行端口转发:
    kubectl port-forward --address 0.0.0.0 <pod-name> <host-port>:<container-port>

    例如,将本地的 8080 端口转发到 Nginx 容器的 80 端口:

    kubectl port-forward --address 0.0.0.0 nginx-5869d7778c-qdfr2 8080:80
    1. 保持终端窗口打开。
    2. 从外部访问 Nginx:
    http://<IP>:8080

    10. 注意事项

    • kubectl port-forward 端口转发是临时的,关闭终端窗口时会断开连接。
    • 使用 --address 0.0.0.0 将服务暴露到所有网络接口,确保在公共网络中谨慎使用。
    • Pod 故障时,需要重新执行端口转发命令。
  • VMware 安装 Ubuntu Desktop 显示不清晰问题解决方法

    使用 VMware 虚拟机安装 Ubuntu Desktop 时,可能会遇到显示不清晰或分辨率不合适的问题。这个问题通常与虚拟机的显示工具和驱动程序配置有关。默认情况下,VMware 安装的 open-vm-tools 只能提供基础的虚拟机功能支持,无法完全优化图形用户界面的显示效果。为了解决这个问题,我们需要安装 open-vm-tools-desktop,它包含了图形用户界面的相关优化,确保显示效果更加清晰、流畅。

    解决步骤

    打开终端
    在 Ubuntu Desktop 中,按 Ctrl + Alt + T 打开终端窗口。

    安装 open-vm-tools-desktop
    在终端中输入以下命令来安装 open-vm-tools-desktop

    sudo apt update
    sudo apt install open-vm-tools-desktop

    该命令将自动安装与 VMware 图形界面优化相关的组件,并解决分辨率和显示不清晰的问题。

    重启虚拟机
    安装完成后,重启虚拟机以使更改生效:

    sudo reboot

  • Linux 文件系统选择指南:EXT4、XFS、Btrfs

    选择合适的文件系统是设置 Linux 系统时的关键决策。此选择显著影响性能、稳定性、数据完整性和可用功能。在最流行的选项中,EXT4、XFS 和 Btrfs 各自提供了一组独特的优势和劣势。

    EXT4:稳定可靠的主力

    EXT4 是最成熟和广泛采用的 Linux 文件系统,通过广泛的测试和实际使用赢得了其稳定性和可靠性的声誉。作为 EXT3 的继承者,它保留了向后兼容性,同时引入了性能和可扩展性的显著改进。

    优点:

    • 坚如磐石的稳定性和成熟度: 其悠久的历史和广泛的使用使其成为任何 Linux 环境中极其稳定和可靠的选择。
    • 均衡的性能: EXT4 提供适用于各种工作负载的良好整体性能,尤其擅长处理较小的文件和资源适中的系统。
    • 出色的兼容性: 作为许多主要 Linux 发行版的默认文件系统,确保了与现有工具和内核版本的无缝集成和兼容性。
    • 强大的日志功能: 日志功能通过记录文件系统更改来保证数据完整性,最大限度地降低意外系统中断后数据损坏的风险。
    • 向后兼容性: EXT4 可以无缝挂载较旧的 EXT3 和 EXT2 文件系统,简化了迁移。
    • 大容量支持: 它可以处理高达 1 EB 的卷和高达 16 TB 的单个文件,满足大量的存储需求。
    • SSD 优化 (TRIM): 支持 TRIM 命令可优化固态硬盘的性能并延长其使用寿命。

    缺点:

    • 有限的高级功能: 与较新的文件系统相比,EXT4 缺乏内置的高级功能,例如快照和本机数据完整性校验和。
    • 极端工作负载下的可扩展性限制: 虽然能够处理较大的容量,但在极大的文件系统和高要求的计算场景中,其扩展效率可能不如 XFS。
    • 没有本机加密: 加密通常使用 dm-crypt 等工具在较低层次进行管理。
    • SSD 上潜在的写入放大: 日志记录过程可能会增加固态硬盘上的写入操作,从而可能缩短其使用寿命,尽管 TRIM 有助于缓解此问题。

    最佳使用场景(扩展):

    • 标准桌面和笔记本电脑系统: 其性能、稳定性和兼容性的平衡使其成为日常计算任务、软件开发、网络浏览和一般生产力的绝佳选择。
    • 引导分区: 由于其成熟度和广泛支持,EXT4 通常是 /boot 分区的默认和推荐文件系统,确保可靠的系统启动。
    • 通用服务器: 对于没有极端 I/O 需求或大量文件的 Web 服务器、应用程序服务器和文件服务器,EXT4 提供了一个坚实可靠的基础。
    • 中小型数据库: 对于不处理极大对象或不需要非常高事务率的数据库,EXT4 可以提供良好的性能和稳定性。
    • 虚拟机主机(用于访客镜像): 在存储虚拟机磁盘映像时,EXT4 提供了一个稳定且易于理解的环境。
    • 外部硬盘和 USB 驱动器: 其广泛的兼容性使其成为可能在不同 Linux 系统上使用的便携式存储设备的安全选择。
    • 嵌入式系统: 在资源受限且稳定性和低开销非常重要的环境中,EXT4 可能是一个合适的选择。

    XFS:适用于大数据的可扩展强者

    XFS 由 Silicon Graphics (SGI) 开发,是一种高性能的 64 位日志文件系统,专为可扩展性和高效处理大型文件和海量数据集而设计。

    优点:

    • 卓越的可扩展性: XFS 擅长管理非常大的文件系统,可有效扩展到 EB 级别 的存储,并在高负载下保持性能。
    • 针对大型文件进行了优化: 在处理大型连续文件时提供卓越的读写性能,使其非常适合媒体服务器、数据仓库和高性能计算环境。
    • 高效的空间分配: 采用基于区段的分配方式,最大限度地减少碎片并提高性能,尤其对于大型连续数据块。
    • 可靠的日志功能: XFS 包含强大的日志功能,以确保数据一致性并促进系统故障后的快速恢复。
    • 在线碎片整理: 能够 在文件系统挂载并积极使用时对其进行碎片整理,最大限度地减少停机时间。
    • 动态分配: XFS 根据需要高效地分配存储空间。
    • 在线分区扩展: 允许在不卸载的情况下无缝调整分区大小。

    缺点:

    • 无法缩小分区: 一旦创建了 XFS 分区,就无法减小其大小,因此在初始设置期间需要仔细规划。
    • 缺乏本机校验和: XFS 不包含数据和元数据的内置数据完整性校验和,与 Btrfs 等文件系统相比,可能会增加静默数据损坏的风险。
    • 延迟分配风险: 虽然通常可以提高性能,但在突然断电且数据尚未物理写入磁盘的情况下,延迟分配策略可能会导致数据丢失。
    • 强制数据日志记录: 虽然对传统硬盘有利,但强制数据日志记录可能会增加固态硬盘的写入周期,从而可能缩短其使用寿命。

    最佳使用场景(扩展):

    • 大型媒体服务器: 由于其在处理大型连续数据方面的出色性能,非常适合存储和流式传输大型视频和音频文件。
    • 视频编辑和制作工作站: 大型文件的快速读/写速度对于处理原始视频素材和项目文件至关重要。
    • 高性能计算 (HPC): 适用于管理科学模拟和研究中生成和处理的大量数据集。
    • 大型数据库: 对于具有非常大的表和高 I/O 吞吐量要求的数据库,XFS 可以提供显著的性能优势。
    • 日志文件服务器: 有效处理来自多个源的大型日志文件的持续写入。
    • 软件构建服务器: 在处理大型代码库和众多中间文件时,可以缩短构建时间。
    • 大型文件归档: 非常适合存储和管理大量大型文件集合。
    • 备份服务器(用于大型备份): 有效处理完整系统备份中常见的大型顺序写入。

    Btrfs:具有高级功能的现代文件系统

    Btrfs 是一种现代的写时复制 (CoW) 文件系统,旨在解决传统 Linux 文件系统的许多限制。它包含快照、子卷、内置 RAID 和数据完整性检查等高级功能。

    优点:

    • 尖端功能: Btrfs 提供了一系列丰富的高级功能,包括快照、用于灵活分区的子卷、本机 RAID(0、1、10 和实验性的 5/6)、数据压缩和在线碎片整理。
    • 增强的数据完整性: 它采用数据和元数据的校验和来检测,并且在某些 RAID 配置中,自动修复数据损坏。
    • 写时复制 (CoW) 架构: 这种基本设计原则提高了可靠性并实现了高效的快照和数据重复数据删除。
    • 节省空间的快照: 创建只读或读写快照可以轻松进行备份和系统回滚。
    • 灵活的子卷: 子卷提供了一种在单个物理文件系统中创建逻辑分区的机制。
    • 动态 inode 分配: Btrfs 可以高效地处理大量文件。
    • 在线调整大小: 支持在线扩展,以及虽然有时不太可靠,但可以缩小文件系统。
    • 数据重复数据删除: 可以识别并消除重复的数据块,从而节省宝贵的存储空间。

    缺点:

    • 历史稳定性问题: 虽然已显著改进,但在某些复杂配置中,特别 是对于 RAID 5 和 6 的实现,Btrfs 在历史上一直存在稳定性问题,一些人仍然认为这是实验性的。
    • 性能开销: CoW 机制有时会导致更高的 CPU 和内存使用率,并且对于非常大的顺序写入,写入性能可能比 XFS 慢。由于 CoW,随着时间的推移,碎片化也可能变得更加明显。
    • 增加的复杂性: 大量的高级功能使得 Btrfs 的管理和故障排除比 EXT4 或 XFS 更复杂。
    • SSD 上潜在的写入放大: 尽管支持 TRIM,但固有的 CoW 特性可能会导致固态硬盘上更高的写入放大。

    最佳使用场景(扩展):

    • 需要轻松回滚的工作站和笔记本电脑: 快照允许用户在安装软件或更改配置后轻松恢复到以前的系统状态。
    • 家庭服务器和 NAS 设备: 内置的 RAID 支持(RAID 0、1、10 和实验性的 5/6)和数据完整性功能使其对数据保护很有吸引力。
    • 利用快照的虚拟机主机: 虚拟机映像的快照允许快速回滚到以前的状态,有助于测试和开发。
    • 容器存储: 子卷可以有效地用于管理 Docker 和其他容器化平台的存储。
    • 开发和测试环境: 快照对于创建一致且易于恢复的测试环境非常宝贵。
    • 受益于数据压缩的系统: 内置压缩可以节省磁盘空间,尤其对于可压缩的文件类型。
    • 类似单盘 RAID 的配置(RAID 1 用于元数据/数据): 即使在单个磁盘上,对元数据(以及可选的数据)使用 RAID 1 也可以提高数据完整性。
    • Arch Linux 和 openSUSE 系统(默认): 这些发行版已将 Btrfs 作为其默认设置,表明其适用于广泛希望使用其高级功能的 用户。

    选择正确的文件系统:总结

    功能EXT4XFSBtrfs
    稳定性出色良好良好(RAID 5/6 实验性)
    性能全面良好,更适合小文件大型文件性能出色尚可,大型写入可能较慢
    可扩展性良好大型文件系统性能出色良好
    数据完整性日志日志数据和元数据校验和,自我修复
    快照无本机支持无本机支持内置
    子卷
    RAID 支持无本机支持无本机支持内置(RAID 0, 1, 10, 5, 6)
    压缩无本机支持无本机支持内置
    在线调整大小仅扩展仅扩展扩展和缩小(缩小可能不太可靠)
    碎片整理随着时间推移可能发生由于区段分配,不太容易发生由于 CoW 可能成为问题
    SSD 优化TRIM 支持TRIM 支持,强制数据日志记录TRIM 支持,可能存在写入放大
    复杂性简单中等复杂
    默认选择许多发行版通常用于服务器一些现代发行版

    结论:

    最佳的文件系统选择取决于您的具体需求和优先级。

    • 对于通用计算,稳定性和易用性至关重要,EXT4 仍然是一个可靠且经过充分测试的选项。
    • 对于处理大型文件并需要高吞吐量和可扩展性的苛刻服务器环境,XFS 提供了出色的性能。
    • 如果您优先考虑快照、数据完整性检查和内置 RAID 等高级功能,Btrfs 提供了一个强大而现代的解决方案,但需要在复杂性和历史稳定性方面做出权衡。

    考虑您的工作负载、数据完整性的重要性、对高级功能的需求以及您管理可能更复杂的文件系统的舒适程度。如果可能,在非生产环境 中测试不同的文件系统可以为 其性能和适用性提供有价值的见解。最终,了解每个文件系统的优势和劣势将使您能够做出明智的决定,并为您的 Linux 系统构建坚实的基础。