精华内容
下载资源
问答
  • initrd镜像文件的作用

    2013-03-28 00:54:53
    1、什么是initrdinitrd 英文含义 boot loader initialized RAM disk,即由引导程序初始化的RAM磁盘。initrd在实际根文件系统可用之前挂载到系统中一个初始根文件系统。initrd与内核绑定在一起, 并作为内核...


    1、什么是initrd

    • initrd 的英文含义是 boot loader initialized RAM disk,即由引导程序初始化的RAM磁盘。initrd是在实际根文件系统可用之前挂载到系统中的一个初始根文件系统。initrd与内核绑定在一起, 并作为内核引导过程的一部分进行加载。内核然后会将这个initrd文件作为其阶段引导过程的一部分来加载模块,这样才能在以后的引导过程中使用真正的文 件系统,并挂载实际的根文件系统。根文件系统可以存储在包括IDE、SCSI、USB在内的多种介质上,如果将这些设备的驱动都编译进内核,可以想象内核 会多么庞大、臃肿。所以可以把initrd看做是在启动过程中连接内核与根文件系统的一个桥梁。

    其实initrd***.img是一个镜像文件,类似ramdisk,把一段程序打包到img里,然后在开机的时候在内存里开辟一段区域,一般是2m,释放到那里运行,都是一些初始化的程序,比如sisc_mod、 ext3、sd_mod等模块和insmod、nash等命令。不同内核,初始化的img可以相同,也可以不同,如果没有,可以在grub.conf里加 上no initrd

    initrd 中包含了实现这个目标所需要的目录和可执行程序的最小集合,例如将内核模块加载到内核中所使用的 insmod工具。以及一些mount、mknod等命令,这些会在后面的nash部分讲到。Initrd 的用途主要有以下四种:*

    1. linux 发行版的必备部件 linux 发行版必须适应各种不同的硬件架构,将所有的驱动编译进内核是不现实的,initrd 技术是解决该问题的关键技术。Linux 发行版在内核中只编译了基本的硬件驱动,在安装过程中通过检测系统硬件,生成包含安装系统硬件驱动的 initrd,无非是一种即可行又灵活的解决方案。

    2. livecd 的必备部件 同 linux 发行版相比,livecd 可能会面对更加复杂的硬件环境,所以也必须使用 initrd。

    3. 制作 Linux usb 启动盘必须使用 initrd usb 设备是启动比较慢的设备,从驱动加载到设备真正可用大概需要几秒钟时间。如果将 usb 驱动编译进内核,内核通常不能成功访问 usb 设备中的文件系统。因为在内核访问 usb 设备时, usb 设备通常没有初始化完毕。所以常规的做法是,在 initrd 中加载 usb 驱动,然后休眠几秒中,等待 usb设备初始化完毕后再挂载 usb 设备中的文件系统。

    4. 嵌入式开发中常用做永久根文件系统。

    5. 在 linuxrc 脚本中可以很方便地启用个性化 bootsplash。

    2、剖析initrd

    在linux2.4内核initrd的文件格式是文件系统镜像文件,即使用loop设备来构建的。loop设备是一个设备驱动程序,利用它可以将文件作为 一个块设备挂载到系统中,然后就可以查看这个文件系统中的内容了。到了linux2.6 内核的 initrd 的文件格式即支持原来的文件系统镜像文件,也支持 cpio 格式,而cpio就是用来取代原来的文件系统镜像文件格式。通过如下步骤可以查看到initrd文件里面的内容:

    # mv initrd-2.6.18-8.2.img initrd-2.6.18-8.2.img.gz
    # gunzip initrd-2.6.18-8.2.img.gz
    # cpio -id < initrd-2.6.18-8.2.img
    # ls -l
    drwx------ 2 root root 4096 08-31 11:13 bin
    drwx------ 3 root root 4096 08-31 11:13 dev
    drwx------ 2 root root 4096 08-31 11:13 etc
    -rwx------ 1 root root 1833 08-31 11:13 init
    drwx------ 2 root root 4096 08-31 11:13 lib
    drwx------ 2 root root 4096 08-31 11:13 proc
    lrwxrwxrwx 1 root root 3 08-31 11:13 sbin -> bin
    drwx------ 2 root root 4096 08-31 11:13 sys
    drwx------ 2 root root 4096 08-31 11:13 sysroot

    从上面的结果可以看出,initrd里面是一个很小的根文件系统,在 /bin 目录中有一组很少但却非常必要的应用程序,包括 nash、insmod等。init则是其引导的核心文件,在cpio格式的initrd里,该文件的名称只能是init。而在原来镜像文件格式的 initrd其核心文件可以是init和linuxrc。init通常是一个脚本文件,负责加载内核访问根文件系统必须的驱动,以及加载根文件系统。关于 nash的解释是,nash (not a shell)它不是一个SHELL,是一个设计的尽可能小的简单命令解释器。主要用于初始化RAM DISK时候解释里面的linuxrc或者init这些简单的脚本。nash目前常用的构建命令如下:

    echo

    将字符串输出到标准输出,只是功能上没有系统里面echo那么多。

    find

    显示指定路径下所匹配名称的文件,即只支持linux系统里find命令中的-name参数。

    losetup

    将文件帮定到回环设备/dev/loopdev上

    mkdevices

    指定创建的块设备文件存放路径,如:mkdevices /dev

    mknod

    创建设备文件

    mkrootdev

    创建根文件系统的设备节点,根据内核传递参数当中的“root=”来创建对应该设备的节点,节点的名称是/dev/root,它不仅能够根据root= /dev/xxx来生成对应的设备节点,还能够在碰到root=LABEL=/的情况下探测所有的硬盘分区,以便找到对应着卷标为/的分区。

    pivot_root

    转换根文件系统,以及挂载临时根文件系统。

    raidautorun

    自动检测所有的raid设备

    showlabels

    显示设备的LABEL以及UUID sw

    itchroot

    与pivot_root功能类似,用于转换根文件系统。但只能用于2.6或以后的核心。

    展开全文
  • 2. 系统DB有哪些,都有什么作用,需不需要做备份,为什么;损坏了如何做还原(主要master库); master:它包含一个系统表集合,整个实例中央存储库,维护登录账户,其他数据库,文件分布,系统配置设置,磁盘...

    2. 系统DB有哪些,都有什么作用,需不需要做备份,为什么;损坏了如何做还原(主要是master库);

    master:它包含一个系统表集合,是整个实例的中央存储库,维护登录账户,其他数据库,文件分布,系统配置设置,磁盘空间,资源消耗,端点和
    链接服务器等方面的信息。它记录SQL2005初始化信息,所以它对实例极为重要。在创建,修改或删除用户数据库,更改服务器或任何数据库配置,以及修改
    或添加用户账户后都要备份该数据库。
    model:它是SQL2005实例中所有新建数据库的模板。执行create database 命令时SQL2005会简单地将该模板数据库中的内容复制到新建数据库中,如果希望
    新建的每个数据库都带有表,存储过程,数据库选项和许可等,那么可以在Model数据库中加入这些元素,此后再新建数据库时就会添加这些元素。
    msdb:该库供SQLserver实例--主要是SQLServer代理使用来存储计划的任务,修改和备份、还原历史信息。对自动化任务和DTS作了某 些修改的命令时需要备份它。
    tempdb:它是SQL2005用于各种操作的实例范围的临时工作空间。每次打开都重建
    resource:它是SQL2005新引入的数据库,是只读的。包含所有的系统对象,如系统存储过程,系统扩展存储过程和系统函数等。


    当master数据库被破坏并且没有可用的备份时,可以使用自动设置中的Rebuild database选项将其恢复成实例安装后的状态。必须经过认真考虑后才能使用该操作,因为它会清除包括
    所有登录在内的所有服务器相关的配置,从而不得不从头开始重做所有的事情

    转载于:https://www.cnblogs.com/dc2014/p/5195864.html

    展开全文
  • 文件系统发展

    2018-06-20 11:06:00
    元数据会占用额外的磁盘空间,但总体比例不会很大,它对功能的实现和性能的提升有非常重要的作用。格式化文件系统,其实就是写入一些初始化的元数据的过程。 上图一个完整的FAT32分区: FA...

    为什么引入文件系统?

    因为磁盘上面不仅要存放文件数据本身,还需要有对这些数据进行管理的数据,比如文件起始位置、大小、创建时间等。这些数据又叫做元数据(Metadata)。不同文件系统的元数据是不一样的。元数据会占用额外的磁盘空间,但总体比例不会很大,它对功能的实现和性能的提升有非常重要的作用。格式化文件系统,其实就是写入一些初始化的元数据的过程。

    上图是一个完整的FAT32分区: FAT1: 文件分配表,描述文件存储空间的簇链接关系(下一簇数据存储在哪个簇,因为同一个文件中数据的簇号是连续的)。 FAT2: FAT1的备份。 FDT: 文件目录表,描述了其他元数据信息(包括起始位置、大小、时间、权限等文件和目录属性)。

    这种链表式的存储方式效率不高。

    缺点:

    1.簇为最小单元,磁盘利用率不够。

    2.链表形式导致磁盘碎片,会降低访问速度。

    3.掉电可能引起FAT表未刷新,簇映射乱掉。

    4.需要FAT表和目录共同匹配才能识别文件。

    5.容量有限,簇数增加会导致FAT表索引速度慢。

    Windows上用的FAT、NTFS,Linux下的ext4、XFS、btrfs都是常见的文件系统。FAT简单,用得也广,但功能、性能、对数据的保护度都有所欠缺。NTFS是Windows下推荐的文件系统。Linux中用ext4的人较多,这是大多数Linux发行版的默认文件系统。在服务器领域,用XFS的人较多,因为在部分环境下它能表现出较高的性能。

    文件系统的发展

    1. 网络文件系统:如CIFS(Windows网上邻居所用的协议)和NFS,就是网络文件系统。它们和普通文件系统的概念有所差别,并不定义文件数据是如何在磁盘上面分布的,而是告诉网络中的客户端,文件数据应当如何传输,怎么通过网络访问远端的文件。所以,它实际上是搭建在普通文件系统之上的。提供网络文件服务的设备,需要有一个本地的文件系统(如ext4),然后在启动一个或多个网络文件系统,负责从普通文件系统中读取数据,向外传送。

    2. 分布式文件系统或集群文件系统:如Hadoop中的HDFS。它们能把很多台电脑里的数据整合起来,对外表现出一个单一的存储节点,提供服务,实现性能扩展和高可靠性等高级特性。它们实际上也不会直接操作磁盘数据,而是叠加在普通文件系统之上的。用户对这类文件系统的IO请求,被它们处理之后,会转化为每一个节点上的普通IO,再调用本地的文件系统进行实际的数据读写。

    3. 特殊文件系统:Linux下就有sysfs和procfs等特殊文件系统,用来管理系统设备,调用内核接口。它们和磁盘上的数据就没有任何直接的联系了,只是以文件接口的方式,提供了很多特殊功能给用户使用。因为在接口上面和普通文件读写类似,所以也被冠名为文件系统。

    下面介绍几种分布式存储的方法:

    持久化存储

    关键概念: 文件系统,数据库系统

    文件系统中,大量文件没有很好组织,缺乏对象之间关键,读取效率低,因此有了数据库。

    单台计算机无法满足数据存储和处理需求,需要集群化方案,如何高效读取分布式计算机文件,高效执行分布式数据库的SQL查询,就有了NOSQL。包括:

    • 知名分布式文件系统:HDFS
    • 分布式非关系型(非结构化)数据库:Hbase和MongoDB。

    分布式文件系统

    2003年,Google发布论文GFS,启发Apache Nutch开发了HDFS。2004年,Google 又发布了论文《MapReduce: Simplified Data Processing on Large Clusters》,Doug Cutting等人实现计算框架MapReduce ,并与HDFS结合来更好的支持该框架。2006年项目从Butch搜索引擎中独立出来,成为了现在的Hadoop。

    GFS隐藏了底层的负载均衡,切片备份等细节,使复杂性透明化,并提供统一的文件系统接口。其成本低,容错高,高吞吐,适合超大数据集应用场景。

    HDFS原理: 1、横向扩展,增加“数据节点”就能增加容量。 2、增加协调部门,“命名节点”维护元数据,负责文件系统的命名空间,控制外部访问,将数据块印射到数据节点。还会备份元数据从命名节点,它只与命名节点通信。 3、数据库在多个数据节点备份。

    弱点: 1.不适合实时数据访问。 2.无法高效存储小文件,太多小文件会降低命名节点检索效率,降低系统处理速度。 3.不支持多用户写入。 4.不支持文件任意位置修改,只能在文件末尾追加新数据。

    分布式数据库

    Google发布论文《Bigtable: A Distributed Storage System for Structured Data》。

    HBase

    Hbase在HDFS基础上提供了Bigtable的能力; 并且基于列的模式进行存储。

    HBase的数据模型: 表格 行 列族 列限定符 单元 版本

    HBase体系结构: HMaster HRegion HRegion服务器

    HBase的列存储设计非常方便扩展,可以修改列族定义、增加列族或列限定符,所以被成为“宽表”。

    宽表模式优点: 节省关系数据库连接操作和存储空间。 可将不同Schema模式的数据混合,即异构数据源的统一和集成。

    MongoDB

    面向集合,数据分组存储在数据集,数据集被称为集合,每个集合在数据库有唯一标识,可以包含无数文档。

    与HBase区别: 1.数据直接存储在文件系统上,而非HDFS上。其也有大文件存储概念GridFS,由MongoDB自身实现。 2.数据模型以文档为单位,支持多种复杂结构。文档中字段或属性不限定特定类型。 3.单个文档不再切分和分布式存储。

     

    非持久化存储

    关键字:缓存和散列 散列:数据的散列值作为键,待写入的数据作为值,进行key-value配对存储。散列值由散列函数(算法)得出,好的算法尽量避免散列冲突(散列值不唯一)。

    提高缓存访问命中率: 淘汰算法:最少使用(LFU),最久未用(LRU)。

    缓存系统:

    Memcached, Berkeley DB, Redis。 MongoDB也可以做缓存,Redis和Berkeley DB也支持持久化存储,没那么绝对。

    Memcached: 基于散列映射。 LRU。 客户端(任何语言)通过Memcached协议 来与守护进程通信(c语言)。 服务器端无切片和副本等分布式功能,服务器之间不通信,需要应用端实现。

    Berkeley DB(轻量级): 嵌入式数据库系统。 架构简单,key-value。 支持ACID数据库事务处理,细粒度锁,XA接口,热备份,同步复制等。 核心不支持分布式,支持持久化。

    Redis(远程字典服务器):1.超高性能,每秒数十万次。 2.支持字符串,散列表,列表,集合。 3.支持事务性,例如a转账给b,a扣钱,b加钱,如果b未加成功,a扣的钱返还。 4.可设定生命周期,为key-value设置生命周期(TTL),例如验证码,限时特惠。 5.持久化,全量保存的RDB镜像(速度快),增量保存的AOF日志(资源消耗少,丢失少)。 6.主从同步,从服务器利用发布/订阅机制从主服务器接收发布的记录。 7.哨兵,自动化监控和故障恢复。 8.适用读多写少,主服务器写,从服务器读,主服务器一旦出错,系统恢复麻烦。Redis3.0后提出了“集群”概念,包括预分片技术,对水平扩展更好的支持。

     

    分布式存储的三种类型:

    有关分布式存储的三个基本问题

    文件系统vs对象存储——选型和趋势

    块存储、文件存储、对象存储这三者的本质差别是什么

    分布式存储的应用场景相对于其存储接口,现在流行分为三种:

    对象存储: 也就是通常意义的键值存储,其接口就是简单的GET、PUT、DEL和其他扩展,如七牛、又拍、Swift、S3

    块存储: 这种接口通常以QEMU Driver或者Kernel Module的方式存在,这种接口需要实现Linux的Block Device的接口或者QEMU提供的Block Driver接口,如Sheepdog,AWS的EBS,青云的云硬盘和阿里云的盘古系统,还有Ceph的RBD(RBD是Ceph面向块存储的接口)

    文件存储: 通常意义是支持POSIX接口,它跟传统的文件系统如Ext4是一个类型的,但区别在于分布式存储提供了并行化的能力,如Ceph的CephFS(CephFS是Ceph面向文件存储的接口),但是有时候又会把GFS,HDFS这种非POSIX接口的类文件存储接口归入此类。

     

    参考链接:FAT32快速入门《FAT文件系统原理》

    转载于:https://www.cnblogs.com/AndrewYin/p/9202787.html

    展开全文
  • Android培训班(107)start_kernel函数4

    千次阅读 2012-05-08 21:40:52
    cgroup_init_early()这个函数主要作用是控制组进行早期的初始化什么叫控制组(controlgroups)呢?简单地说,控制组就是定义一组进程具有相同资源占有程度。比如可以指定一组进程使用CPU为30%,磁盘IO为40%,...

    cgroup_init_early()

    这个函数主要作用是控制组进行早期的初始化。什么叫控制组(controlgroups)呢?简单地说,控制组就是定义一组进程具有相同资源的占有程度。比如可以指定一组进程使用CPU30%,磁盘IO40%,网络带宽为50%。因此通过控制组就可以把所有进程分配不同的资源。可以参考这个文档(http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/ch01.html)。



    local_irq_disable()

    这个函数主要作用是关闭当前CPU的所有中断响应。在ARM体系里主要就是对CPSR寄存器进行操作。



    early_boot_irqs_off()

    这个函数主要作用是标记内核还在早期初始化代码阶段,并且中断在关闭状态,如果有任何中断打开或请求中断的事情出现,都是会提出警告,以便跟踪代码错误情况。早期代码初始化结束之后,就会调用函数early_boot_irqs_on来设置这个标志为真。



    early_init_irq_lock_class()

    这个函数主要作用是对中断请求描述符进行锁的早期初始化。在ARM里,这个函数没有任何代码。



    lock_kernel()

    这个函数主要作用是初始化大内核锁。在对称多处理器的系统里,每一个CPU都可以运行内核的代码,但有时需要只能一个CPU运行内核代码,那么怎么办呢?要解决这个问题,就需要给内核配备一把锁,只要拥有这把锁的CPU才可以运行内核的代码,并且同一个CPU可以递归地运行内核。大内核锁显然有一个优点,就是同一个CPU可以递归地运行,而自旋锁就不行了,一旦拥有,就不能跑掉了。不过大内核锁也有一个明显的坏处,就是多个CPU资源浪费,并不能并行地执行。因此,新版本的内核慢慢把可以并行的代码使用别的信号量锁来代替了,只有在某种特定的架构下才使用大内核锁,以便提高整个系统的并行性能。

    展开全文
  • 1.31 对于没有显式初始化的变量初始值可以作怎样假定?如果一个全局变量初始值为“零”,它可否作为空指针或浮点零? 1.32 下面代码为什么不能编译?intf(){chara[]="Hello,world!";} *1.33 下面的初始化有...
  • 超爽自学课件(java)

    2007-09-16 16:04:04
    <br>(4) 第4章:初始化和清除 本章开始介绍构建器,它的作用是担保初始化的正确实现。对构建器的定义要涉及函数过载的概念(因为可能同时有几个构建器)。随后要讨论的是清除过程,它并非肯定如想象的那么...
  • 《你必须知道495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    书中列出了C用户经常问400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面主题,并分别给出了解答,而且结合代码示例阐明要点。 《你必须知道495个C语言问题》结构...
  • 1.31 对于没有显式初始化的变量初始值可以作怎样假定?如果一个全局变量初始值为“零”,它可否作为空指针或浮点零? 18  1.32 下面代码为什么不能编译? intf(){char a[]=Hello, world!;} 18 *1.33 下面...
  • Linux进程编程记录

    2020-10-31 21:36:10
    一、进程相关概念 1.什么是程序,什么是进程,有什么区别 程序静态概念,gcc xxx.c -o pro,磁盘中生成pro文件叫程序 ...pid=1:init进程,作用:系统初始化 调用getpid()获取自身进程标识符,getppi..
  • Windows启动一个复杂过程,从加载器(NTLDR或WinLoad)开始工作到Windows子系统准备就绪,中间经历了若干个复杂步骤,包括内核和执行体的初始化,创建系统进程和线程,对象管理器初始化基本对象,I/O管理器...
  • LINGO软件学习

    2009-08-08 22:36:50
    现在我们将深入介绍如何创建集,并用数据初始化属性。学完本节后,你对基于建模技术集如何引入模型会有一个基本理解。 2.1 为什么使用集 集LINGO建模语言基础,程序设计最强有力基本构件。借助于集...
  • linux系统排错

    2019-11-14 22:10:15
    1.系统引导过程概述(图形比文字描述更直观...从功能上看,BIOS分为三个部分: 自检及初始化程序;硬件中断处理;程序服务请求 2.当grub磁盘引导阶段出现问题应该怎样解决? (1)将selinux改为disable并且 reboot ...
  • 首先在主项目入口文件中初始化一个 store 实例 new Vuex.Store,然后挂在到 Vue.__share__.store 上 <p>2.然后在子项目 App.vue 中获取到 Vue.__share__.store 并调用 store.registerModule(‘app-x',...
  • Linux内核源码+电子书

    热门讨论 2011-02-21 15:13:10
    1.5.2 Linux内核的作用 1.5.3 Linux内核的抽象结构 1.6 Linux内核源代码 1.6.1 多版本的内核源代码 1.6.2 Linux内核源代码的结构 1.6.3 从何处开始阅读源代码 1.7 Linux内核源代码分析工具 1.7.1 ...
  • 5.5.2 Ramdisk对磁盘的初始化 113 5.6 驱动中的请求处理 119 5.6.1 请求的处理 119 5.6.2 读/写请求 120 5.6.3 DeviceIoControl请求 122 5.7 Ramdisk的编译和安装 124 5.7.1 编译 124 5.7.2 安装 125 5.7.3 对安装的...
  • 5.5.2 Ramdisk对磁盘的初始化 113 5.6 驱动中的请求处理 119 5.6.1 请求的处理 119 5.6.2 读/写请求 120 5.6.3 DeviceIoControl请求 122 5.7 Ramdisk的编译和安装 124 5.7.1 编译 124 5.7.2 安装 125 5.7.3 对安装的...
  • 本章开始介绍构建器,它的作用是担保初始化的正确实现。对构建器的定义要涉及函数过载的概念(因为可能同时有几个构建器)。随后要讨论的是清除过程,它并非肯定如想象的那么简单。用完一个对象后,通常可以不必管它...
  • C语言编程要点

    2017-09-18 00:10:37
    1.14 取模运算符(modulus operator)“%”的作用是什么? 17 第2章 变量和数据存储 18 2.1. 变量存储在内存(memory)中的什么地方? 18 2.2. 变量必须初始化吗? 19 2.3. 什么是页抖动(pagethrashing)? 19 2.4. 什么是...
  • 2.5.4 ARP协议的作用是? 2.5.5 当路由器接收的IP报文的TTL值等于1时,采取的策略是? 2.5.6 在NetWare 网络中,客户需要访问某个类型的服务器时,首先要发送一个 ()广播报文来寻找服务器? 2.5.7 IPX地址网络...
  • windowsnt 技术内幕

    2014-04-09 20:47:17
    理解特殊访问权限 NTFS文件和文件夹拷贝和移动 删除具有“禁止访问”权限文件 为什么修改权限不能马上起作用 理解微软公司打印术语 理解NT打印权限 设置打印机权限 创建一个新打印机 共享一个已经存在打印机...
  • 这样做成本太高了,而且完全没有必要,因为它只是一个报表系统,对数据库响应时间要求不高,所以我们当然可以让这个查询直接到磁盘上去搜索数据,这也就是为什么在这样系统里,buffer hit比例很低,但却一个...
  • 3.3.8 从内存中创建初始化参数文件 108 3.3.9 复原点增强功能 109 3.3.10 数据库驻留连接池 111 3.3.11 比较和会聚数据库对象 114 3.4 SQL*Plus新特性 117 3.4.1 SQL*Plus错误日志 118 3.4.2 SQL*Plus可...
  • (2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间文件存储系统导致变化,(4)为了可靠和高效地传输,虽然用户可以在终端上直接地使用它,但是它主要作用是供程序使用。本规范尝试满足...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
    (2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间文件存储系统导致变化,(4)为了可靠和高效地传输,虽然用户可以在终端上直接地使用它,但是它主要作用是供程序使用。本规范尝试满足...

空空如也

空空如也

1 2 3 4
收藏数 64
精华内容 25
关键字:

初始化磁盘的作用是什么