26.磁盘管理

1|0一.磁盘在系统上的命名

1|11.设备名称

设备名称分区名称分区类型
/dev/sda /dev/sda1 第一块物理磁盘第一分区
/dev/sdb /dev/sdb3 第二块物理磁盘第三分区
...... ....... .......

1|22.分区分类

  • 磁盘分区类型分为: p主分区e扩展分区l逻辑分区

  • 逻辑分区属于扩展分区, 扩展分区属于主分区

  • 主分区又叫做引导分区

2|0二.两种分区格式

2|11.mbr分区格式

  • 最多可分4个主分区
  • 通常用于小于2T的硬盘空间
  • 分区工具: fdisk

2|22.gpt分区格式

  • 最多可分128个主分区
  • 通常用于大于2T的硬盘空间
  • 分区工具: gdisk

3|0三.制做磁盘分区的通用流程

  1. 3|1插一块硬盘

  2. 3|2小于2T空间用mbr分区格式, 大于2T推荐用gpt分区格式

  3. 3|3设置分区类型和大小保存设置

  4. 3|4为每个分区制作文件系统(格式化):mkfs.xfs

  5. 3|5为每个分区关联挂载点:mount

4|0四.制作磁盘分区 fdisk

4|11.先给虚拟机添加一块小于2T的磁盘

🌵使用命令查看磁盘是否存在
       # lsblk
       # ll /dev/sd + 双击 Tab 键

4|22.使用fdisk工具进行分区

🌵选择要分区的磁盘设备 "/dev/sdb"
          [root@shawn ~]#fdisk /dev/sdb

🌵输入"m"获取帮助信息
🌵常用命令操作
       "n" : #新建分区
       "d" : #删除分区
        "l" : #显示分区类型
       "m" : #帮助菜单
        "p" : #显示分区表信息
        "q" : #不保存退出
       "w" : #保存退出
 
 
 

4|33.开始创建三种分区

  • 主分区创建
🌵创建一个主分区
          命令(输入 m 获取帮助):n #新建分区
                    Partition type:
                       p     primary (0 primary, 0 extended, 4 free)                                                  #三种分区类型
                       e     extended
                   Select (default p): p                                                                                           #选择你想要的分区类型(逻辑分区需要先有扩展分区)
                   分区号 (1-4,默认 1):1                                                                                    #设定分区号
                   起始 扇区 (2048-4194303,默认为 2048):                                                      #    设置扇区开始位置(正常默认就行)
                   将使用默认值 2048
                    Last 扇区, +扇区 or +size{K,M,G} (2048-4194303,默认为 4194303):+500M    #大小
                    分区 1 已设置为 Linux 类型,大小设为 500 MiB                                                    #设置成功
  • 扩展分区创建
🌵创建一个扩展分区
          命令(输入 m 获取帮助):n                                               #新建
          Partition type:
               p      primary (1 primary, 0 extended, 3 free)
               e      extended Select (default p): e                             #选择扩展分区
              分区号 (2-4,默认 2): #分区号
              起始 扇区 (1026048-4194303,默认为 1026048):   #默认起始位置
              将使用默认值 1026048
               Last 扇区, +扇区 or +size{K,M,G} (1026048-4194303,默认为 4194303):    #都给扩展分区 将
               使用默认值 4194303
                分区 2 已设置为 Extended 类型,大小设为 1.5 GiB #设置成功
  • 新建逻辑分区
 🌵创建一个逻辑分区
          命令(输入 m 获取帮助):n                                                                       #新建
                Partition type:
                    p     primary (1 primary, 1 extended, 2 free)
                    l      logical (numbered from 5) Select (default p): l                                                       #创建逻辑分区
                    添加逻辑分区 5 起始 扇区 (1028096-4194303,默认为 1028096):                            #默认起始
                    将使用默认值 1028096
                    Last 扇区, +扇区 or +size{K,M,G} (1028096-4194303,默认为 4194303):+500M      #分配空间
                   分区 5 已设置为 Linux 类型,大小设为 500 MiB #设置成功

4|44.创建完成后查看一下保存退出

 
🌵先使用"p"命令查看一下
            命令(输入 m 获取帮助):p #查看
               设备Boot           Start               End               Blocks        Id         System
                /dev/sdb1         2048             1026047        512000       83         Linux            #主分区
                /dev/sdb2        1026048        4194303        1584128      5          Extended     #扩展分区
                /dev/sdb5        1028096         2052095        512000       83         Linux           #逻辑分区
 
 
🌵使用"w"命令保存退出
             命令(输入 m 获取帮助):w    #保存退出
                 The partition table has been altered!
                 Calling ioctl() to re-read partition table.
                 正在同步磁盘。

4|55.保存退出后再查看一下磁盘设备

🌵查看
        # lsblk
        # ll /dev/sd + 双击 Tab 键
🌵如果没有显示出来就使用"partprobe"命令刷新一下内核(经常使用的命令)
       # partprobe
 
 
 
🌵查看磁盘分区类型
        [root@shawn ~]#fdisk /dev/sdb -l | grep "类型"
        磁盘标签类型:dos #dos就是mbr分区类型 

4|66.制作文件系统(格式化磁盘分区)

🌵"mkfs. + 双击 Tab 键"查看一下可以做哪些文件系统
        [root@shawn ~]#mkfs.
        mkfs.btrfs        mkfs.ext2     mkfs.ext4     mkfs.xfs
        mkfs.cramfs    mkfs.ext3     mkfs.minix
 
🌵也可以对单个磁盘分区进行格式化
         [root@shawn ~]#mkfs.xfs /dev/sdb1
 
🌵格式化整个磁盘
          [root@shawn ~]#mkfs.xfs /dev/sdb
 
🌵如果不成功,可加入"-f"选项进行强制
          [root@shawn ~]#mkfs.xfs -f /dev/sdb

4|77.使用"mount"进行挂载

🌵创建一个文件夹
        [root@shawn ~]#mkdir /test1
 
 
🌵进行挂载并查看
        [root@shawn ~]#mount /dev/sdb1 /test1/
        [root@shawn ~]df -h

5|0五.制作磁盘分区 gdisk

5|11.先给虚拟机添加一块大于2T的磁盘

🌵使用命令查看磁盘是否存在
              # lsblk
              # ll /dev/sd    +   双击 Tab 键

5|22.使用gdisk工具进行分区

🌵选择要分区的磁盘设备 "/dev/sdc"
          [root@shawn ~]#gdisk /dev/sdc

5|33.开始创建分区

  • 分区创建,与fdisk步骤相同
🌵创建一个主分区,可创128个
         Command (? for help): n                    #创建分区
         Partition number (1-128, default 1):    #分区号
         First sector (34-6291455966, default = 2048) or {+-}size{KMGTP}:                                          #默认起始位置
         Last sector (2048-6291455966, default = 6291455966) or {+-}size{KMGTP}: +500M               #设置大小
         Current type is 'Linux filesystem'
         Hex code or GUID (L to show codes, Enter = 8300): 8300                                                        #选择类型(默认就行)
         Changed type of partition to 'Linux filesystem'

5|44.创建完成后查看一下保存退出

🌵先使用"p"命令查看一下  
          Command (? for help): p                   #查看
          Number    Start (sector)    End (sector)     Size             Code     Name
          1                2048                1026047           500.0 MiB   8300      Linux filesystem
 
🌵使用"w"命令保存退出
           Command (? for help): w                           #保存退出
            Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
            PARTITIONS!!
            Do you want to proceed? (Y/N): y                      #按y
            OK; writing new GUID partition table (GPT) to /dev/sdc.
            The operation has completed successfully.        #创建成功

5|55.保存退出后再查看一下磁盘设备

🌵查看
          # lsblk
          # ll /dev/sd + 双击 Tab 键
 🌵如果没有显示出来就使用"partprobe"命令刷新一下内核(经常使用的命令)
         # partprobe
 
🌵查看磁盘分区类型
          [root@shawn ~]#fdisk /dev/sdc -l | grep "类型"
           磁盘标签类型:gpt         #gpt类型

5|66.制作文件系统(格式化分区)

🌵选择需要格式化的分区
         [root@shawn ~]#mkfs.xfs /dev/sdc1

5|77.挂载

🌵创建一个文件夹并挂载
          [root@shawn ~]#mkdir /test2
          [root@shawn ~]#mount /dev/sdc1 /test2
 
🌵"df"查看挂载情况
          [root@shawn ~]#df -h

6|0六.磁盘挂载方式

6|11.什么是磁盘挂载

  • 如果要使用一块磁盘空间, 就需要准备一个空的目录作为挂载点
  • 让该磁盘设备与其进行关联
  • 可以把这个目录看成一个进入磁盘空间的入口
  • 数据真正的存在磁盘设备里面, 而不是目录这个入口

6|22.挂载与卸载命令---(临时挂载)

  • 挂载: mount
🌵语法: "mount [磁盘设备] [挂载点]"
           [root@shawn ~]#mount /dev/sdc1 /test2
 
 
 
 
  • 卸载: umount
🌵语法: "umount [挂载点 / 磁盘设备]" #卸载填任意一方都可
             [root@shawn ~]#umount /dev/sdc1
             [root@shawn ~]#umount /test2
🌵如果不能卸载可以采用强制卸载选项"-l"

6|32.磁盘挂载配置文件---(开机自动挂载)

  • /etc/fstab配置文件格式
🌵使用"blkid"命令查看磁盘分区设备的"UUID"及"type"
       [root@shawn ~]#blkid | grep "sdb1"
           /dev/sdb1: UUID="7e95e893-4738-4e8f-896a-d1e0f0e58cde" TYPE="xfs"
 
🌵文件内容设置格式
      1.[设备的UUID] [挂载目录] [文件系统类型] [挂载参数:默认] [是否备份:0] [是否检查:0]
       例 : "UUID=987083d5-fcd9-4933-8c6f-939a1f79cb8a /home xfs defaults 0 0""
      2.[设备名称] [挂载目录] [文件系统类型] [挂载参数:默认] [是否备份:0] [是否检查:0]
        例 : "/dev/sdb1 /test1 xfs defaults 0 0"
 
🌵"-a":从新加载"fstab"文件, 并且会检测语法是否正确
       #[root@shawn ~]#mount -a

7|0七.制作 swap 分区

7|11.使用fdisk 或者 gdisk 工具分出一个磁盘空间

🌵分出一块空间,然后查看一下
         [root@shawn ~]#gdisk /dev/sdc Command (? for help): n    #创建分区
          Partition number (2-128, default 2):                                     #分区号默认
          First sector (34-6291455966, default = 1026048) or {+-}size{KMGTP}:                           #其实位置
          Last sector (1026048-6291455966, default = 6291455966) or {+-}size{KMGTP}: +1G     #分区大小
         Current type is 'Linux filesystem'
         Hex code or GUID (L to show codes, Enter = 8300):     #文件系统类型默认
         --------------------------------------------------------------
       
         Command (? for help): p          #查看
        Number        Start (sector)     End (sector)     Size                 Code      Name
        1                   2048                  1026047           500.0 MiB       8300       Linux filesystem
        2                  1026048 -            3123199         1024.0MiB       8300       Linux filesystem    #成功
         ---------------------------------------------------------------
   
          Command (? for help): w                               #保存退出
          Do you want to proceed? (Y/N): y                  #确认
          The operation has completed successfully.    #分区成功

7|22.再次查看一下磁盘设备

🌵查看
             # lsblk
             # ll /dev/sd + 双击 Tab 键
 
🌵如果没有显示出来就使用"partprobe"命令刷新一下内核(经常使用的命令)
            # partprobe

7|33.制作swap文件系统

           [root@shawn ~]#mkswap /dev/sdc2
           正在设置交换空间版本 1,大小 = 1048572 KiB
           无标签,UUID=537af376-fe42-4b9f-9bf8-f1e036a27295

7|44.激活swap分区,并对比前后大小

🌵激活前使用"free"内存查看命令查看"swap"空间大小
           [root@shawn ~]#free -m
                       total     used    free     shared    buff/cache    available
            Mem:  972     125      532      7             313               702
           Swap: 1906     0         1906           #可以看到大小为"1964M"
 
🌵使用"swapon"命令激活分区
          [root@shawn ~]#swapon /dev/sdc2
 
🌵再次查看"swap"空间大小
          [root@shawn ~]#free -m
                      total    used    free   shared   buff/cache    available
          Mem:   972    126      532     7           314               701
          Swap:  2930   0        2930       #空间已经变成了"2930M"
 
🌵也可以使用"swapon -s"查看到"swap"空间及设备
          [root@shawn ~]#swapon -s
          文件名         类型             大小          已用      权限
         /dev/sda3      partition      1952764    0            -2
         /dev/sdc2      partition     1048572   0            -3

 

ps: 如果磁盘没有过多的分区给 swap, 可以通过文件来增加 swap空间, 但本质上还是磁盘空间

7|5 

7|65.使用文件来制作swap

 🌵首先制作一个500M(大小自己设置)大小的文件,可以使用"泡泡机"
            [root@shawn ~]#dd if=/dev/zero of=/swap_file bs=500M count=1
 
🌵查看文件信息
            [root@shawn ~]#ll -h /swap_file
            -rw-r--r-- 1 root root 500M 11月 7 16:56 /swap_file #大小"500M"
 
🌵制作"swap"文件系统
             [root@shawn ~]#mkswap /swap_file
 
🌵激活这个"文件swap分区"
            [root@shawn ~]#swapon /swap_file
 
🌵使用"swapon -s"查看"swap"设备信息
           [root@shawn ~]#swapon -s
          文件名         类型         大小             已用      权限
          /dev/sda3    partition    1952764      264       -2
          /swap_file    file            511996        0           -3
 
🌵可以发现是"file"类型的"swap"分区

7|7 

7|86.关闭swap分区

🌵"swapoff /dev/sdc2"关闭某一个"swap"分区
            [root@shawn ~]#swapoff /dev/sdc2
            [root@shawn ~]#free -m
                        total     used    free    shared    buff/cache    available
            Mem:   972      125     533     7             313               701
           Swap:  1906      0       1906           #对比之前可以发现"swap"空间减少了
 
🌵"swapoff -a"关闭所有"swap"分区
            [root@shawn ~]#swapoff -a
            [root@shawn ~]#free
                         total            used      free         shared     buff/cache   available
             Mem:   995684      127240   547912   7736         20532          720260
            Swap:    0                0             0             #"swap"分区被置空了

7|9 

7|107.设置开机自动挂载新增的swap分区

  • /etc/fstab: 方法与上面磁盘设置相似
🌵方式一:使用"UUID"
             例: "UUID=de5f8b73-bebd-487d-8c80-53c6721b4a7f swap swap defaults 0 0"
 
🌵方式二
             例:  "/dev/sdc2 swap swap defaults 0 0"           #正常磁盘设备
             例: "/dev/sdc1 /file_swap swap defaults 0 0"     #磁盘文件

8|0 

9|0 

10|0八.服务器RAID卡配置方法

Dell R740服务器配置RAID5+1

11|0 

12|0九.服务器文件系统的修复

12|1  1.什么情况会造成文件系统错误

  • Linux系统中,为了提升读写速度, 通常将要写入硬盘的数据先放在内存中(buff区)

  • 够了一波再写入内存, 如果这时突然断电或其它未知原因产生后

  • 从新启动系统后,可能会发现系统提示: 文件系统错误信息

    ps : 查看运行日志可以提示出损坏的文件系统

12|22.真实情况下修复方式

  • 操作系统进不去, 可以先进到单用户模式进行操作
  • 首先尝试 mount 和 umount ,看看能不能重放日志进行修复
  • 不行再执行 xfs_repair -n [磁盘设备名], 只检查不修复 (它会检查文件系统, 如果损坏会列出将要执行的操作)
  • 如果检测到日志与数据不一致, 系统会推荐以读写的方式挂载, "xfs"会在挂载的时候修复这种不一致. 命令 : mount -o rw,norecovery [磁盘设备] [挂载目录]
  • 上述不成功只能使用以下实验中的方法

12|32.文件系统损坏与修复演示

  • 为了让情况更明白, 我们来模拟一下文件系统损坏的实验
  • 我们模拟把我的"/dev/sdc1"损坏
🌵首先查看一下"/dev/sdc1"的挂载与空间情况
             [root@shawn ~]#df -h | grep "/dev/sdc1"
                  /dev/sdc1 497M 26M 472M 6% /test2      #总共"497M"空间
 
🌵查看一下文件
             [root@shawn ~]#echo 2222 > /test2/a.txt
             [root@shawn ~]#cat !$
              2222
 
🌵使用"泡泡机"模拟损坏文件系统
            [root@shawn ~]#dd if=/dev/zero of=/dev/sdc1 bs=1M count=200
             记录了200+0 的读入
             记录了200+0 的写出
             209715200字节(210 MB)已复制,0.632261 秒,332 MB/秒
 
🌵再次操作"/test2/a.txt"文件
            [root@shawn ~]#echo 5555 > /test2/a.txt
            [root@shawn ~]#cat !$ 5555              #发现文件读写还是正常的
 
🌵卸载然后再次挂载---->发现已经损害
            [root@shawn ~]#umount /dev/sdc1
            [root@shawn ~]#mount /dev/sdc1 /test2
            mount: 将 /dev/sdc1 挂载到 /test2 失败: 结构需要清理
 
🌵使用"xfs_repair"命令修复文件系统
            [root@shawn ~]#xfs_repair /dev/sdc1
             ..............
             ......
             done           #修复操作完成
 
🌵再次挂载,并查看文件
             [root@shawn ~]#mount /dev/sdc1 /test2
             [root@shawn ~]#cat /test2/a.txt
             5555           #文件也有,说明修复成功了
 
 
 
 
 
  • 紧接着实验
  • 上面我们是用"泡泡机"制造了 200M 的大小进行覆盖
  • 现在我们来加大一点空间 255M 来进行实验
 
🌵开始模拟损坏 255M
         [root@shawn ~]#dd if=/dev/zero of=/dev/sdc1 bs=1M count=255
             记录了255+0 的读入
             记录了255+0 的写出
             267386880字节(267 MB)已复制,0.475109 秒,563 MB/秒
 
 
🌵对文件进行读写直接就报错了
          [root@shawn ~]#echo 5555 > /test2/a.txt
            -bash: /test2/a.txt: 结构需要清理
           [root@shawn ~]#ls /test2/a.txt
             ls: 无法访问/test2/a.txt: 输入/输出错误
 
🌵于是来卸载进行修复----呵呵
          [root@shawn ~]#umount /dev/sdc1
          [root@shawn ~]#xfs_repair /dev/sdc1
            .....................
             ............
           .Sorry,balabala    #失败了
  • 修复失败了
  • 那我们只能进行强制修复了
  • 选项 "-L" 进行强制修复, 但这种情况会清除日志文件, 数据也就没有了, 意义就在于能用
 
🌵我们来进行"-L"选项进行强制修复
          ⛅第一种情况强制修复成功,可以挂载了,但没有数据
               [root@shawn ~]#xfs_repair -L /dev/sdc1
               [root@shawn ~]#mount /dev/sdc1 /test2
               [root@shawn ~]#cat /test2/a.txt
               cat: /test2/a.txt:       没有那个文件或目录
          ⛅第二种情况,使用了强制修复也无法成功
                [root@shawn ~]#xfs_repair -L /dev/sdc1
                 ........................
                 ..............
                 ..Sorry, balabala
                 EXiting now.    #强制也失败了
 
 
🌵强制也是失败的情况下只能重做文件系统了
              [root@shawn ~]#mkfs.xfs /dev/sdc1        
              #于是一块新的磁盘分区就诞生了

12|44.修复总结

  • xfs_repair方法, 成功后恢复数据

  • xfs_repair -L强制, 成功后数据消失

  • mkfs.xfs格式化是最终解决方案, 数据消失

  • 修复不了数据是因为磁盘分区信息表被损坏导致的, 能修复可能是没有损坏到分区信息(随机性)

  • 1|0做本次实验的目的在于: 数据不可能 100% 的修复回来, 这时候就需要你有备份意识, 可见备份的重要性

13|0 

14|0十.xfs文件系统备份与恢复

14|11.XFS的备份级别

级别说明
0 完全备份
1~9 增量备份

14|22.两种备份说明

备份名称说明
完全备份 每次都将指定的目录完完整整的复制一份
增量备份 每次都将之前备份后有变化的文件进行备份

14|33.备份与恢复命令

  • 备份: xfsdump

    xfsdump -l 0 -L xxx_bak -M "bak_all" -f /opt/xxx_bak_all /test

选项作用
-l (小写L) 指定level, 0~9, 默认为 0
-L 纪录每次备份的 session 标头, 这里可以填写针对此文件系统的简易说明
-M 可以纪录储存媒体的标头, 这里可以填写此媒体的简易说明
-f 后面接 [将要产生的备份路径及名字] [想要备份的原路径]
-I (大写 i) 从"/var/lib/xfsdump/inventoty" 里列出目前备份的信息状态
  • 恢复: xfsrestore

    xfsrestore -f /opt/xxx_bak_all /xxx路径

选项作用
-f 后面接 [备份文件路径] [想要恢复到的路径]

14|44.xfsdump使用限制

  • 必须用 root 权限
  • 只能备份已挂载的文件系统
  • 只能备份XFS文件系统
  • 只能用xfsrestore恢复
  • 透过文件系统的UUID来分辨备份档,因此不能备份相同UUID的文件系统

14|55.备份与恢复原则

  • 备份 : 先做全量备份, 然后再做增量备份 (源路径的末尾不能有"/")
  • 恢复 : 先恢复全量备份, 然后按时间点从远到近恢复增量备份

14|66.数据备份与恢复演示

  • 数据备份
 
🌵先准备一个已经关联了一个目录的文件系统
🌵怎么分区制作文件系统上面已经介绍,这里不做赘述
       [root@shawn ~]#df -h | grep "/dev/sdc1"
        /dev/sdc1     497M    26M     472M    6%    /test2
 
🌵在"/test2"下创建文件
      [root@shawn ~]#echo 222 > /test2/2.txt
      [root@shawn ~]#cat /test2/1.txt /test2/2.txt
       111
       222
 
🌵开始一次全量备份"xfsdump", 并查看
     [root@shawn ~]#xfsdump -l 0 -L sdc1_bak_all -M "all_bak" -f /mnt/sdc1_bak_all /test2
      .....................
      ........:SUCCESS     #提示"SUCCESS"代表成功
     [root@shawn ~]#ls /mnt sdc1_bak_all     #发现备份文件存在
 
🌵我们在"/test2"下修改"2.txt",并新增"3.txt",然后进行增量备份
       [root@shawn ~]#echo 555 >> /test2/2.txt
       [root@shawn ~]#echo 666 > /test2/3.txt
       [root@shawn ~]#cat /test2/2.txt /test2/3.txt  
       222
       555      #追加了这一行
       666       #新加了这个文件
      [root@shawn ~]#xfsdump -l 1 -L sdc1_bak_all -M "add1" -f /mnt/sdc1_bak_add1 /test2
      [root@shawn ~]#ls /mnt sdc1_bak_add1
      sdc1_bak_all              #出现了第一次的增量备份文件
 
 
 
  • 数据恢复
🌵我们将"/test2"下的文件全部删除来演示数据消失
        [root@shawn ~]#rm -rf /test2/*
        [root@shawn ~]#ll /test2/ 总用量 0      #清理干净了
 
 
🌵先恢复全量备份"sdc1_bak_all", 并查看文件
      [root@shawn ~]#xfsrestore -f /mnt/sdc1_bak_all /test2
      [root@shawn ~]#ls /test2
        1.txt 2.txt
      [root@shawn ~]#cat /test2/1.txt /test2/2.txt
        111
        222               #发现是最开始的全量备份的数据状态
 
🌵再恢复第一次的增量备份"sdc1_bak_add1", 并查看文件
       [root@shawn ~]#xfsrestore -f /mnt/sdc1_bak_add1 /test2
       [root@shawn ~]#ls /test2
        1.txt 2.txt 3.txt
       [root@shawn ~]#cat /test2/1.txt /test2/2.txt /test2/3.txt
       111
       222
       555
       666             #发现正是第一次增量备份时的数据状态

 


__EOF__

本文作者ଲ小何才露煎煎饺
本文链接https://www.cnblogs.com/zeny/articles/14443984.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   ଲ小何才露煎煎饺  阅读(93)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示