当前位置: 首页 > news >正文

如何迁移 Linux 服务器 第一部分 - 系统准备

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

简介

在许多情况下,您可能需要将数据和操作需求从一个服务器迁移到另一个服务器。您可能需要在新的数据中心实施解决方案,升级到更大的机器,或者过渡到新的硬件或新的 VPS 提供商。

无论您的原因是什么,在从一个系统迁移到另一个系统时,您应该考虑许多不同的因素。如果您没有使用 Chef、Puppet 或 Ansible 等配置管理解决方案,要获得功能上等效的配置可能会很困难。您不仅需要传输数据,还需要配置您的服务在新机器上以相同的方式运行。

在本指南中,您将了解如何准备源系统和目标系统进行迁移。这将包括让您的两台机器使用 SSH 密钥进行通信,并调查需要转移的组件。您将在本系列的下一篇文章中开始实际迁移。

步骤 1 – 创建备份

执行任何可能具有破坏性的操作时,首先要采取的步骤是创建全新的备份。您不希望在替换正在运行的生产机器之前,某个命令在当前生产机器上出现故障。

有许多不同的方法可以备份服务器。您的选择将取决于对您的情况有意义的选项以及您最熟悉的选项。

如果您可以访问物理硬件并有备份空间(磁盘驱动器、USB 等),您可以使用许多可用的镜像备份解决方案之一来克隆磁盘。在处理云服务器时,功能上等效的方法是在控制面板界面内拍摄快照或镜像。

完成备份后,您就可以继续进行下一步了。在本指南的其余部分,您将需要以 root 用户身份运行许多命令,或者使用 sudo

步骤 2 – 收集有关源系统的信息

在开始迁移之前,您应该配置目标系统以匹配源系统。

您将希望在当前服务器和计划迁移到的服务器之间尽可能匹配。您可能希望在迁移到较新的目标系统之前升级当前服务器,并在此之后再次进行备份。重要的是,当开始实际迁移时,它们尽可能匹配。

大部分可以帮助您决定为新机器创建哪种服务器系统的信息可以使用 uname 命令检索:

uname -r
5.4.0-26-generic

这是您当前系统正在运行的内核版本。为了使事情顺利进行,最好尝试在目标系统上匹配它。

您还应该尝试匹配源服务器的发行版和版本。如果您不知道在源机器上安装的发行版版本,可以通过输入以下命令来查找:

cat /etc/issue
Ubuntu 20.04.3 LTS \n \l

如果可能的话,您应该使用相同的参数创建新服务器。在这种情况下,您将创建一个 Ubuntu 20.04 系统。您还应尽量匹配内核版本。通常情况下,这应该是来自您的 Linux 发行版存储库的最新内核。

步骤 3 – 在源和目标服务器之间设置 SSH 密钥访问

您需要让您的服务器能够通信以便传输文件。为了做到这一点,您应该在它们之间交换 SSH 密钥。您可以学习如何在 Linux 服务器上配置 SSH 密钥。

您需要在目标服务器上创建一个新密钥,以便将其添加到现有服务器的 authorized_keys 文件中。这比另一种方式更清晰,因为这样,当迁移完成时,新服务器的 authorized_keys 文件中就不会有多余的密钥。

首先,在目标机器上,通过输入以下命令检查您的 root 用户是否已经拥有 SSH 密钥:

ls ~/.ssh
authorized_keys

如果您看到名为 id_rsa.pubid_rsa 的文件,则表示您已经拥有密钥,您只需要将它们传输过去。

如果您没有看到这些文件,可以使用 ssh-keygen 创建新的密钥对:

ssh-keygen -t rsa

按照提示按下 “Enter” 键以接受默认值。

现在,您可以通过 ssh 将密钥传输到源服务器:

cat ~/.ssh/id_rsa.pub | ssh other_server_ip "cat >> ~/.ssh/authorized_keys"

现在,您应该能够在目标系统上自由地通过 SSH 连接到源服务器,而无需提供密码:

ssh other_server_ip

这将使任何进一步的迁移步骤更加顺利。

步骤 4 – 创建需求清单

现在你将进行系统的深入分析。

在运营过程中,你的软件需求可能会发生变化。有时旧服务器上可能存在一些曾经需要的服务和软件,但已经被替换。

一般来说,不需要的服务可以被禁用,如果完全不需要,也可以被卸载,但是清点它们可能会耗费时间。你需要发现在源服务器上正在使用的服务,然后决定这些服务是否应该存在于新服务器上。

你发现服务和运行级别的方式取决于服务器所采用的“init”系统的类型。init 系统负责在用户命令或自动启动和停止服务。从 2014 年开始,几乎所有主要的 Linux 发行版都采用了一个名为 Systemd 的 init 系统,本指南将反映 Systemd。

为了列出已注册到 Systemd 的服务,你可以使用 systemctl 命令:

systemctl list-units -t service
  UNIT                                 LOAD   ACTIVE SUB     DESCRIPTION               >accounts-daemon.service              loaded active running Accounts Service          >apparmor.service                     loaded active exited  Load AppArmor profiles    >apport.service                       loaded active exited  LSB: automatic crash repor>atd.service                          loaded active running Deferred execution schedul>blk-availability.service             loaded active exited  Availability of block devi>cloud-config.service                 loaded active exited  Apply the settings specifi>cloud-final.service                  loaded active exited  Execute cloud user/final s>cloud-init-local.service             loaded active exited  Initial cloud-init job (pr>cloud-init.service                   loaded active exited  Initial cloud-init job (me>console-setup.service                loaded active exited  Set console font and keyma>containerd.service                   loaded active running containerd container runti>
…

Systemd 通过“targets”实现服务管理。传统 init 系统的系统一次只能处于一个“运行级别”,而使用 Systemd 的服务器可以同时达到多个 targets。这在实践中更加灵活,但确定哪些服务是活动的可能更加困难。

你可以通过输入以下命令来查看当前活动的 targets:

systemctl list-units -t target
  UNIT                   LOAD   ACTIVE SUB    DESCRIPTIONbasic.target           loaded active active Basic Systemcloud-config.target    loaded active active Cloud-config availabilitycloud-init.target      loaded active active Cloud-init targetcryptsetup.target      loaded active active Local Encrypted Volumesgetty.target           loaded active active Login Promptsgraphical.target       loaded active active Graphical Interfacelocal-fs-pre.target    loaded active active Local File Systems (Pre)local-fs.target        loaded active active Local File Systemsmulti-user.target      loaded active active Multi-User Systemnetwork-online.target  loaded active active Network is Online
…

你可以通过输入以下命令来列出所有可用的 targets:

systemctl list-unit-files -t target
UNIT FILE                     STATE           VENDOR PRESET
basic.target                  static          enabled
blockdev@.target              static          enabled
bluetooth.target              static          enabled
boot-complete.target          static          enabled
cloud-config.target           static          enabled
cloud-init.target             enabled-runtime enabled
cryptsetup-pre.target         static          disabled
cryptsetup.target             static          enabled
ctrl-alt-del.target           disabled        enabled
…

从这里,你可以找出每个 target 关联的服务。Targets 可以有服务或其他 targets 作为依赖项,因此你可以通过输入以下命令来查看每个 target 实施的策略:

systemctl list-dependencies target_name.target

multi-user.target 是 Systemd 服务器上常用的一个 target,在启动过程中达到该目标时,用户可以登录。例如,你可以输入以下命令:

systemctl list-dependencies multi-user.target
multi-user.target
● ├─apport.service
● ├─atd.service
● ├─console-setup.service
● ├─containerd.service
● ├─cron.service
● ├─dbus.service
● ├─dmesg.service
● ├─docker.service
● ├─grub-common.service
● ├─grub-initrd-fallback.service
…

这将列出该目标的依赖树,给出当达到该目标时启动的服务和其他 targets 的列表。

通过其他方法检查服务

虽然大多数由软件包管理器配置的服务将被注册到 init 系统中,但一些其他软件,如 Docker 部署,可能不会。

你可以尝试通过查看这些服务使用的网络端口和 Unix 套接字来找到这些其他服务和进程。在大多数情况下,服务以某种方式相互通信或与外部实体通信。服务器上只有一定数量的接口可以用于服务通信,检查这些接口是发现其他服务的好方法。

你可以使用 netstat 工具来发现正在使用的网络端口和 Unix 套接字。你可以使用 -nlp 标志运行 netstat 以获得概述:

netstat -nlp
  • -n 指定输出中应显示数字 IP 地址,而不是主机名或用户名。在检查本地服务器时,这通常更加信息丰富。
  • -l 指定 netstat 只显示活动监听套接字。
  • -p 显示每个使用端口或套接字的进程 ID(PID)和名称。
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:8200            0.0.0.0:*               LISTEN      104207/vault
tcp        0      0 0.0.0.0:1935            0.0.0.0:*               LISTEN      3691671/nginx: mast
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      3691671/nginx: mast
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      3691671/nginx: mast
tcp        0      0 0.0.0.0:1936            0.0.0.0:*               LISTEN      197885/stunnel4
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      162540/systemd-reso
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      129518/sshd: /usr/s
tcp        0      0 127.0.0.1:3000          0.0.0.0:*               LISTEN      99465/node /root/he
tcp        0      0 0.0.0.0:8088            0.0.0.0:*               LISTEN      3691671/nginx: mast
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      3691671/nginx: mast
tcp        0      0 0.0.0.0:56733           0.0.0.0:*               LISTEN      170269/docker-proxy
tcp6       0      0 :::80                   :::*                    LISTEN      3691671/nginx: mast
tcp6       0      0 :::22                   :::*                    LISTEN      129518/sshd: /usr/s
tcp6       0      0 :::443                  :::*                    LISTEN      3691671/nginx: mast
tcp6       0      0 :::56733                :::*                    LISTEN      170275/docker-proxy
udp        0      0 127.0.0.53:53           0.0.0.0:*                           162540/systemd-reso
raw6       0      0 :::58                   :::*                    7           162524/systemd-netw
raw6       0      0 :::58                   :::*                    7           162524/systemd-netw
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name     Path
unix  2      [ ACC ]     STREAM     LISTENING     5313074  1/systemd            /run/systemd/userdb/io.systemd.DynamicUser
unix  2      [ ACC ]     SEQPACKET  LISTENING     12985    1/systemd            /run/udev/control
unix  2      [ ACC ]     STREAM     LISTENING     12967    1/systemd            /run/lvm/lvmpolld.socket
unix  2      [ ACC ]     STREAM     LISTENING     12980    1/systemd            /run/systemd/journal/stdout
unix  2      [ ACC ]     STREAM     LISTENING     16037236 95187/systemd        /run/user/0/systemd/private
…

netstat 输出包含两个独立的块 —— 一个用于网络端口,一个用于套接字。如果你在这里看到了通过 init 系统没有信息的服务,你将不得不弄清楚原因,并确定是否打算迁移这些服务。

你可以使用 lsof 命令获取关于服务提供的端口的类似信息:

lsof
COMMAND       PID            USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
node\x20/   99465            root   20u  IPv4 16046039      0t0  TCP 127.0.0.1:3000 (LISTEN)
vault      104207           vault    8u  IPv4  1134285      0t0  TCP *:8200 (LISTEN)
sshd       129518            root    3u  IPv4  1397496      0t0  TCP *:22 (LISTEN)
sshd       129518            root    4u  IPv6  1397507      0t0  TCP *:22 (LISTEN)
systemd-r  162540 systemd-resolve   12u  IPv4  5313507      0t0  UDP 127.0.0.53:53
systemd-r  162540 systemd-resolve   13u  IPv4  5313508      0t0  TCP 127.0.0.53:53 (LISTEN)
docker-pr  170269            root    4u  IPv4  1700561      0t0  TCP *:56733 (LISTEN)
docker-pr  170275            root    4u  IPv6  1700573      0t0  TCP *:56733 (LISTEN)
stunnel4   197885        stunnel4    9u  IPv4  1917328      0t0  TCP *:1936 (LISTEN)
sshd      3469804            root    4u  IPv4 22246413      0t0  TCP 159.203.102.125:22->154.5.29.188:36756 (ESTABLISHED)
nginx     3691671            root    7u  IPv4  2579911      0t0  TCP *:8080 (LISTEN)
nginx     3691671            root    8u  IPv4  1921506      0t0  TCP *:80 (LISTEN)
nginx     3691671            root    9u  IPv6  1921507      0t0  TCP *:80 (LISTEN)
nginx     3691671            root   10u  IPv6  1921508      0t0  TCP *:443 (LISTEN)
nginx     3691671            root   11u  IPv4  1921509      0t0  TCP *:443 (LISTEN)
nginx     3691671            root   12u  IPv4  2579912      0t0  TCP *:8088 (LISTEN)
nginx     3691671            root   13u  IPv4  2579913      0t0  TCP *:1935 (LISTEN)
nginx     3691674        www-data    7u  IPv4  2579911      0t0  TCP *:8080 (LISTEN)
nginx     3691674        www-data    8u  IPv4  1921506      0t0  TCP *:80 (LISTEN)
nginx     3691674        www-data    9u  IPv6  1921507      0t0  TCP *:80 (LISTEN)
nginx     3691674        www-data   10u  IPv6  1921508      0t0  TCP *:443 (LISTEN)
nginx     3691674        www-data   11u  IPv4  1921509      0t0  TCP *:443 (LISTEN)
nginx     3691674        www-data   12u  IPv4  2579912      0t0  TCP *:8088 (LISTEN)
nginx     3691674        www-data   13u  IPv4  2579913      0t0  TCP *:1935 (LISTEN)

netstatlsof 都是核心 Linux 进程管理工具,在各种其他情境中都很有用。

第五步 – 收集软件包版本

此时,你应该已经对源服务器上运行的服务有了一个很好的了解,你应该在目标服务器上实施这些服务。

你应该有一个服务列表,你知道你需要在新服务器上实施这些服务。为了顺利过渡,重要的是尽可能匹配版本。

你不一定要审查源系统上安装的每个软件包,并尝试在新系统上复制它,但你应该检查对你的需求重要的软件组件,并尝试找到它们的版本号。

你可以尝试从软件本身获取版本号,有时通过向每个命令传递 -v--version 标志,但通过你的软件包管理器更加直接。如果你使用基于 Ubuntu/Debian 的系统,你可以使用 dpkg 命令查看安装的软件包版本:

dpkg -l | grep package_name

如果你使用基于 Rocky Linux、RHEL 或 Fedora 的系统,你可以使用 rpm 来实现相同的目的:

rpm -qa | grep package_name

这将让你对要匹配的软件包版本有一个很好的了解。确保保留任何相关软件的版本号。

结论

现在,你应该已经很清楚源服务器上需要迁移到新机器的进程和服务。你还应该已经完成了允许你的两台服务器相互通信的初步步骤。

你的迁移基础现在已经完成。在本系列的下一篇文章中,你将开始实际的迁移过程。

相关文章:

如何迁移 Linux 服务器 第一部分 - 系统准备

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 在许多情况下,您可能需要将数据和操作需求从一个服务器迁移到另一个服务器。您可能需要在新的数据中心实施解决方案&a…...

网络IO模型都有哪些

“网络IO模型有BIO、NIO、AIO ” “他们分别代表什么,有什么区别吗? BIO:同步阻塞IO。 NIO:同步非阻塞IO。 AIO:异步非阻塞IO。 “BIO为什么是同步阻塞IO,他阻塞的是谁跟谁之间的关联?”。 首先…...

数据结构: 数组在算法中的应用

数组是计算机科学中的一种基础数据结构,它在算法中有着广泛的应用,其关键要素是索引与索引对应的值。 请注意,这些代码示例需要适当的辅助函数(如 swap )和主函数来运行。此外,一些算法(如KMP算…...

js快速转换时间(时间戳转换成年月日时分秒)

1&#xff1a;js转换 1728270833000 转换为 2024-10-07 11:13:53 var date new Date(1728270833000); // 参数需要毫秒数&#xff0c;所以这里将秒数乘于 1000 Y date.getFullYear() -; M (date.getMonth()1 < 10 ? 0(date.getMonth()1) : date.getMonth()1) -; D…...

LeetCode15.三数之和

题目链接&#xff1a;15. 三数之和 - 力扣&#xff08;LeetCode&#xff09; 1.常规解法&#xff08;会超时&#xff09; 由于这道题需要排除相同的三元组&#xff0c;则可以先将目标数组从小到大排序&#xff0c;再遍历数组找到每个符合条件的三元组&#xff0c;若结果中不包…...

SpringBoot3.3 优雅启停定时任务

定时任务是非常常见的功能,在一个复杂的应用程序中,如何优雅地管理这些定时任务的启动与停止尤为重要。 Spring Boot 提供了强大的任务调度支持,通过@Scheduled注解可以轻松地创建定时任务,并且可以通过配置来灵活地管理这些任务的执行环境。在本文中,我们将深入探讨如何…...

数据结构之二叉搜索树(key模型与key_value模型)

二叉搜索树&#xff08;key模型与key_value模型&#xff09; 1. ⼆叉搜索树的概念2. ⼆叉搜索树的性能分析3. ⼆叉搜索树的插⼊4. ⼆叉搜索树的查找5. ⼆叉搜索树的删除6. ⼆叉搜索树的实现代码7. ⼆叉搜索树key和key/value使⽤场景7.1 key搜索场景&#xff1a;7.2 key/value搜…...

图说几何学2300年重大错误:附着在直线z上的直线段必是z的一部分

黄小宁 用泡沫塑料和油漆制成的铅球与真正的铅球&#xff0c;两者有不同的内部形状。同样&#xff0c;数学有长度相同但内部形状不同的伪≌直线段。 几何学有史2300年来一直认定附着在直线z上的直线段一定是z的一部分。其实这是2300年肉眼直观错觉——百年病态集论的症结。 …...

汽车网关(GW)技术分析

一、引言 在现代汽车电子系统中&#xff0c;汽车网关&#xff08;Gateway&#xff0c;简称 GW&#xff09;扮演着至关重要的角色。随着汽车电子技术的不断发展&#xff0c;汽车内部的电子控制单元&#xff08;Electronic Control Unit&#xff0c;简称 ECU&#xff09;数量不断…...

Telnet命令详解:安装、用法及应用场景解析

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…...

C++之LIST模拟实现(代码纯享版)

目录 文章目录 前言 一、代码 总结 前言 本文主要展示了模拟List的代码实现 一、代码 #pragma once #include<iostream> #include<assert.h> using namespace std; namespace zlh {template<class T>struct list_node{T _data;list_node<T>* _next;l…...

华为OD机试 - 括号匹配 - 栈(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…...

打破欧美10年芯片垄断,杨振宁教授关门弟子,仅用三年创造奇迹

有这么一位超级厉害的中国人&#xff0c;硬是把欧美那边垄断了十年的芯片技术给“撬”开了&#xff01;说起来&#xff0c;这才是我们该追的真正明星啊&#xff01;那么&#xff0c;这位大神到底是谁&#xff1f;又是怎么让欧美芯片圈儿里的人听到她的名字就心里发怵的呢&#…...

OpenCV视频I/O(20)视频写入类VideoWriter之用于将图像帧写入视频文件函数write()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::VideoWriter::write() 函数用于将图像帧写入视频文件。 该函数/方法将指定的图像写入视频文件。图像的大小必须与打开视频编写器时指定的大…...

音视频入门基础:FLV专题(14)——FFmpeg源码中,解码Script Tag的实现

一、引言 在《音视频入门基础&#xff1a;FLV专题&#xff08;9&#xff09;——Script Tag简介》中对Script Tag进行了简介&#xff0c;本文讲述FFmpeg源码中是怎样解码FLV文件的Script Tag&#xff0c;拿到里面的信息。 二、flv_read_packet函数 从《音视频入门基础&#x…...

小猿口算APP脚本(协议版)

小猿口算是一款专注于数学学习的教育应用,主要面向小学阶段的学生。它提供多种数学练习和测试,包括口算、速算、应用题等。通过智能化的题目生成和实时批改功能,帮助学生提高数学计算能力。此外,它还提供详细的学习报告和分析,帮助家长和教师了解学生的学习进度和薄弱环节…...

【长文梳理webserver核心】核心类篇

前言 有三个核心组件支撑一个reactor实现 [持续] 的 [监听] 一组fd&#xff0c;并根据每个fd上发生的事件 [调用] 相应的处理函数。这三个组件就是 EventLoop 、Channel 以及 Poller 三个类&#xff0c;其中 EventLoop 可以看作是对业务线程的封装&#xff0c;而 Channel 可以看…...

[实用工具]Docker安装nextcloud实现私有云服务和onlyoffice

Nextcloud是一款开源的云存储和协作平台&#xff0c;允许用户在自己的服务器上存储和访问文件&#xff0c;同时提供强大的协作工具。它可以替代商业云存储服务&#xff0c;让用户拥有完全控制和自主管理自己的数据。 Nextcloud支持文件上传和下载&#xff0c;可以通过Web界面、…...

基于STM32设计的生猪健康检测管理系统(NBIOT+OneNet)(240)

文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成1.2 设计思路1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献【4】项目背景【5】摘要1.4 开发工具的选择【1】设备端开发【2】上位机开发1.5 系统功能总结1.6 系统框架图…...

springboot kafka多数据源,通过配置动态加载发送者和消费者

前言 最近做项目&#xff0c;需要支持kafka多数据源&#xff0c;实际上我们也可以通过代码固定写死多套kafka集群逻辑&#xff0c;但是如果需要不修改代码扩展呢&#xff0c;因为kafka本身不处理额外逻辑&#xff0c;只是起到削峰&#xff0c;和数据的传递&#xff0c;那么就需…...

【华为】基于华为交换机的VLAN配置与不同VLAN间通信实现

划分VLAN&#xff08;虚拟局域网&#xff09;主要作用&#xff1a; 一、提高网络安全性 广播域隔离访问控制增强 二、优化网络性能 减少网络拥塞提高网络可管理性 sysytem-view #进入系统视图配置参数 vlan batch 10 20 #批量创建vlan LSW3: int g0/0/1 port…...

力扣题11~20

题11&#xff08;中等&#xff09;&#xff1a; 思路&#xff1a; 这种题目第一眼就是双循环&#xff0c;但是肯定不行滴&#xff0c;o(n^2)这种肯定超时&#xff0c;很难接受。 所以要另辟蹊径&#xff0c;我们先用俩指针&#xff08;标志位&#xff09;在最左端和最右端&am…...

更美观的HTTP性能监测工具:httpstat

reorx/httpstat是一个旨在提供更美观和详细HTTP请求统计信息的cURL命令行工具&#xff0c;它能够帮助开发者和运维人员深入理解HTTP请求的性能和状态。 1. 基本概述 项目地址&#xff1a;https://github.com/reorx/httpstat语言&#xff1a;该工具主要是以Python编写&#xff…...

在2024 VDC,听一曲“蓝心智能”的江河协奏

作为科技从业者&#xff0c;我们每年参加的终端产品发布会和开发者大会&#xff0c;少则几十场。说每一场都别有新意&#xff0c;那自然是不可能的&#xff0c;但每次去vivo的活动现场&#xff0c;总能给我耳目一新的感觉。 雨果说过&#xff0c;音乐可以表达难以用语言描述&am…...

Python编写的数字光刻仿真程序,使用了Hopkins光刻模型和粒子群优化(PSO)算法来优化掩模设计

Python编写的数字光刻仿真程序,使用了Hopkins光刻模型和粒子群优化(PSO)算法来优化掩模设计,以减少光刻过程中的图形偏差。 4. 定义了几个函数来模拟光波通过光刻系统的变化: - `transfer_function`:计算光波的相位变化。 - `light_source_function`:描述光源在各…...

【AD那些事 11】绘制PCB板时“隔离” 的那些事(笔记摘抄)

在设计新板子时发现需要考虑隔离&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;于是我在网上找了很多资料&#xff0c;摘抄了一些&#xff0c;整理了一下&#xff0c;作为笔记&#…...

sublime配置(竞赛向)

我也想要有jiangly一样的sublime 先决条件 首先&#xff0c;到官网上下载最新的sublime4&#xff0c;然后在mingw官网上下载最新的mingw64 mingw64官网&#xff1a;左边菜单栏点击dowloads,然后选择MinGW-W64-builds(可能会有点慢)——然后有时候会变成选LLVM-minGW,接着选择…...

双向数据库迁移工具:轻松实现 MySQL 与 SQLite 数据互导

项目概述与作用 该项目的核心是实现 MySQL 和 SQLite 两种数据库之间的数据迁移工具。它能够轻松地将 MySQL 数据库中的数据导出为 SQLite 数据库文件&#xff0c;反过来也可以将 SQLite 数据库中的数据上传到 MySQL 数据库中。这个双向迁移工具非常适用于&#xff1a; 数据库备…...

oracle查询表空间信息

方式一&#xff0c;通过SQLPLUS查看&#xff0c;适用于无PLSQL等工具 sqlplus / as sysdba set line 200 set lines 200 col tablespace_name for a20 col SUM_SPACE(M) for a15 col USED_SPACE(M) for a15 col USED_RATE(%) for a15 col FREE_SPACE(M) for a15 SELEC…...

使用Python编写你的第一个算法交易程序

背景 Background ​ 最近想学习一下量化金融&#xff0c;总算在盈透投资者教育&#xff08;IBKRCampus&#xff09;板块找到一篇比较好的算法交易入门教程。我在记录实践过程后&#xff0c;翻译成中文写成此csdn博客&#xff0c;分享给大家。 ​ 如果你的英语好可以直接看原文…...