GUID Partition Table

GUID Partition Table

From Wikipedia, the free encyclopedia

Jump to: navigationsearch

 

Diagram illustrating the layout of GPT scheme. In this example, each logical block ( LBA) is 512 bytes in size, and each partition entry is 128 bytes, and the corresponding partition entries are assumed to be located in LBA 2-33, here. LBA addresses that are negative indicate position from the end of the volume, with −1 as the last addressable block.

GUID Partition Table (GPT) is a standard for the layout of the partition table on a physical hard disk, using globally unique identifiers (GUID). Although it forms a part of the Unified Extensible Firmware Interface (UEFI) standard (Unified EFI Forum proposed replacement for the PC BIOS), it is also used on some BIOS systems because of the limitations of master boot record (MBR) partition tables, which use 32 bits for storing logical block addresses (LBA) and size information.

As of 2010[update], most current operating systems support GPT. Some, including OS X and Microsoft Windows, only support booting from GPT partitions on systems with EFI firmware, but FreeBSD and most Linux distributions can boot from GPT partitions on systems with either legacy BIOS firmware interface or EFI.

 

Contents

 [hide

 

History[edit]

Main articles: INT 13H and Enhanced BIOS

The widespread MBR partitioning scheme, dating from the early 1980s, imposed limitations which affect the use of modern hardware. One of the main limitations is the usage of 32 bits for storing logical block addresses and size information. For hard disks with 512-byte sectors, the MBR partition table entries allow up to a maximum of 2 TiB (232×512 Bytes).[1]

Intel therefore developed a new partition table format in the late 1990s as part of what eventually became UEFI. The GPT as of 2010[update] forms a subset of the UEFI specification.[2] GPT allocates 64 bits for logical block addresses and therefore allows a maximum partition size of 264−1 sectors. For disks with 512-byte sectors, that would be 9.4 ZB (9.4 × 1021 bytes) or 8 ZiB−512 bytes (9,444,732,965,739,290,426,880 bytes or 18,446,744,073,709,551,615 (264−1) sectors × 512 (29) bytes per sector).[1][3][a]

Features[edit]

 

This section needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed. (July 2013)

MBR-based partition table schemes insert the partitioning information for (usually) four "primary" partitions in the master boot record (MBR) (which on a BIOS system is also the container for code that begins the process of booting the system). In a GPT, the first sector of the disk is reserved for a "protective MBR" such that booting a BIOS-based computer from a GPT disk is supported, but the boot loader and O/S must both be GPT-aware. Regardless of the sector size, the GPT header begins on the second logical block of the device.

Like modern MBRs, GPTs use logical block addressing (LBA) in place of the historical cylinder-head-sector (CHS) addressing. The protective MBR is contained in LBA 0, the GPT header is in LBA 1, and the GPT header has a pointer to the partition table, or Partition Entry Array, typically LBA 2. The UEFI specification[4] stipulates that a minimum of 16,384 bytes, regardless of sector size, be allocated for the Partition Entry Array. On a disk having 512-byte sectors, a partition entry array size of 16,384 bytes and the minimum size of 128 bytes for each partition entry, LBA 34 is the first usable sector on the disk.

Hard disk manufacturers are transitioning to 4,096-byte sectors. As of 2010, the first such drives continue to present 512-byte physical sectors to the OS, so degraded performance can result when the drive's (hidden) internal 4 KiB sector boundaries do not coincide with the 4 KiB logical blocks, clusters and virtual memory pages common in many operating systems and file systems. This is a particular problem on writes when the drive is forced to perform two read-modify-write operations to satisfy a single misaligned 4 KiB write operation.[5] Such a misalignment occurs by default if the first partition is placed immediately after the GPT, as the next block is LBA 34, whereas the next 4 KiB boundary begins with LBA 40.

For backward compatibility with most operating systems before Windows Vista, including DOS, OS/2 and Windows, MBR partitions must always start on track boundaries according to the traditional CHS addressing scheme and end on a cylinder boundary. This even holds true for partitions with emulated CHS geometries (as reflected by the BIOS and the CHS sectors entries in the MBR partition table) or partitions accessed only via LBA. Extended partitions always start on cylinder boundaries as well.

This typically causes the first primary partition to start at LBA 63 on disks accessed via LBA, leaving a gap of 62 sectors with MBR-based disks, sometimes called "MBR gap", "boot track", or "embedding area". That otherwise unused disk space is commonly used by boot loaders such as GRUB for storing their second stages.[6] On older computers using alternative LBA/CHS translation schemes or different extended CHS mappings, with smaller LBA-accessed disks, or on disks accessed via CHS only, the value could be even smaller, although not normally less than LBA 16 on normal hard disks.

Since Windows Vista, the first partition usually starts after a gap of 2,047 sectors at LBA 2,048 as part of its new 1 MiB partition alignment policy, so no large-sector misalignment occurs by default, but serious compatibility problems with older operating systems and disk tools exist.

Drives which boot Intel-based Macs are typically formatted with a GPT, rather than with the Apple Partition Map (APM).

GPT also provides redundancy, writing the GPT header and partition table both at the beginning and at the end of the disk.

If the minimum size of 16,384 bytes is allocated for the partition entry array, and the default size of 128 bytes is used for each partition entry, then the maximum number of partitions is limited to 128.

Legacy MBR (LBA 0)[edit]

Traditionally, in IBM PC compatible systems the first sector of the disk holds the Master Boot Record (MBR), containing the drive's partitioning information and the code of the first stage boot loader for BIOS-based systems. For limited backward compatibility, this sector is still reserved for a MBR in the GPT specification, but it is now used in a way that prevents MBR-based disk utilities from misrecognizing and possibly overwriting GPT disks. This is referred to as a protective MBR.[3]

A single partition type of EEh, encompassing the entire GPT drive (where "entire" actually means as much of the drive as can be represented in an MBR), is indicated and identifies it as GPT. Operating systems and tools which cannot read GPT disks will generally recognize the disk as containing one partition of unknown type and no empty space, and will typically refuse to modify the disk unless the user explicitly requests and confirms the deletion of this partition. This minimizes accidental erasures.[3] Furthermore, GPT-aware OSes may check the protective MBR and if the enclosed partition type is not of type EEh or if there are multiple partitions defined on the target device, the OS may refuse to manipulate the partition table.[7]

While the MBR layout (and also the protective MBR layout) was defined around a sector size of 512 bytes per sector, the actual sector size can be larger on various media such as MO disks or hard disks with Advanced Format. Extra space in the MBR typically remains unused.

If the actual size of the disk exceeds the maximum partition size representable using the legacy 32-bit LBA entries in the MBR partition table, the recorded size of this partition is clipped at the maximum, thereby ignoring the rest of disk. This amounts to a maximum reported size of 2 TiB, assuming a disk with 512 bytes per sector (see 512e). It would result in 16 TiB with 4 KB sectors (4Kn), but since many older operating systems and tools are hard-wired for a sector size of 512 bytes or are limited to 32-bit calculations, exceeding the 2 TiB limit would cause serious compatibility problems.[3]

In operating systems that support GPT-based boot through BIOS services rather than EFI, the first sector is also still used to store the first stage of the bootloader code, but modified to recognize GPT partitions. The boot loader in the MBR must not assume a fixed sector size of 512 bytes / sector.[3]

Apple's Boot Camp software for Intel-based Apple Macs creates a hybrid partition table to allow the booting of Windows (which at the time of Boot Camp's creation did not support GPT or EFI). In this system the protective partition is reduced in size to cover from sector 1 to the sector before the first regular partition included in the hybrid MBR. Additional MBR partitions are then defined to correspond to the next three GPT[citation needed] partitions.

Partition table header (LBA 1)[edit]

The partition table header defines the usable blocks on the disk. It also defines the number and size of the partition entries that make up the partition table. The EFI stipulates a minimum of 16,384 bytes be reserved for the partition table array, so there are 128 partition entries reserved, each 128 bytes long.

The header contains the disk globally unique identifier (GUID). It records its own size and location (always LBA 1!) and the size and location of the secondary GPT header and table (always the last sectors on the disk). Importantly, it also contains a CRC32 checksum for itself and for the partition table, which may be verified by the firmware, bootloader and/or operating system on boot. Because of this, hex editors should not be used to modify the contents of the GPT. Such modification would render the checksum invalid. In this case, the primary GPT may be overwritten with the secondary one by disk recovery software. If both GPTs contain invalid checksums, the disk would be unusable, by software that checks the checksum.

GPT header format
OffsetLengthContents
0 (0x00)8 bytesSignature ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h)
8 (0x08)4 bytesRevision (for GPT version 1.0 (through at least UEFI version 2.3.1), the value is 00h 00h 01h 00h)
12 (0x0C)4 bytesHeader size in little endian (in bytes, usually 5Ch 00h 00h 00h meaning 92 bytes)
16 (0x10)4 bytesCRC32 of header (offset +0 up to header size), with this field zeroed during calculation
20 (0x14)4 bytesReserved; must be zero
24 (0x18)8 bytesCurrent LBA (location of this header copy)
32 (0x20)8 bytesBackup LBA (location of the other header copy)
40 (0x28)8 bytesFirst usable LBA for partitions (primary partition table last LBA + 1)
48 (0x30)8 bytesLast usable LBA (secondary partition table first LBA - 1)
56 (0x38)16 bytesDisk GUID (also referred as UUID on UNIXes)
72 (0x48)8 bytesStarting LBA of array of partition entries (always 2 in primary copy)
80 (0x50)4 bytesNumber of partition entries in array
84 (0x54)4 bytesSize of a single partition entry (usually 128)
88 (0x58)4 bytesCRC32 of partition array
92 (0x5C)*Reserved; must be zeroes for the rest of the block (420 bytes for a sector size of 512 bytes; but can be more with larger sector sizes)
LBA sizeTotal

The values for current and backup LBAs of the primary header should be the second sector of the disk (LBA 1) and the last sector of the disk, respectively. The secondary header at the end of the disk identifies its own table of partition entries, which is located directly before that header.

This table must be referenced relative to LBA 1. Thus, on 4Kn disks with 4 KB sectors it does not follow the 512 bytes of the MBR physically (stored in LBA 0) and thereby becomes part of LBA 0 on disks with larger sector sizes. While the described arrangement happens to occur on disks with 512 bytes per sector, there may be "gaps" of unused space between them on disks with larger sector sizes. In other words, with 512-byte sectors it starts at 512th byte from the beginning of the disk, while with 4 KB sectors it starts at 4096th byte. If multi-sector reads are performed, the actual sector size must be included in the calculation when referencing this table.

Partition entries[edit]

GUID partition entry format
OffsetLengthContents
0 (0x00)16 bytesPartition type GUID
16 (0x10)16 bytesUnique partition GUID
32 (0x20)8 bytesFirst LBA (little endian)
40 (0x28)8 bytesLast LBA (inclusive, usually odd)
48 (0x30)8 bytesAttribute flags (e.g. bit 60 denotes read-only)
56 (0x38)72 bytesPartition name (36 UTF-16LE code units)
 128 bytes total

The GPT uses simple and straightforward entries to describe partitions. The first 16 bytes designate the partition type globally unique identifier (GUID). For example, the GUID for an EFI System partition is {C12A7328-F81F-11D2-BA4B-00A0C93EC93B}. The second 16 bytes contain a GUID unique to the partition. Then follow the starting and ending 64-bit LBAs, partition attributes and partition names. As is the nature and purpose of GUIDs, no central registry is needed to ensure the uniqueness of the GUID partition type designators. The location of the partition entries array on disk is defined in the GPT header.

The GPT header contains a field that specifies the size of a partition table entry. The minimum required is 128 bytes, but implementations must allow for other values (see this warning).

Also, the sector size must not be assumed to be hard-wired to 512 bytes per sector in calculations (see Advanced Format), that is, there can be more than four partition entries in a single sector, and (with possible future much larger partition table entries) it is possible to have a sector hold only a fraction of a partition entry. Except for the first two sectors (LBA 0 and LBA 1), the GPT specification just describes the size and organization of a data structure, not in how many sectors it is stored on disk.

The 64 bits partition table attributes are shared between 48 bits common attributes for all partition types, and 16 bits type-specific attributes.

Partition attributes
BitContent
0System partition (disk partitioning utilities must preserve the partition as is)
1EFI firmware should ignore the content of the partition and not try to read from it
2Legacy BIOS bootable (equivalent to active flag (typically bit 7 set) at offset +0h in partition entries of the MBR partition table)[8]
3–47Reserved for future use
48–63Defined and used by the individual partition type

Microsoft defines the type-specific attributes for Basic data partition according to this TechNet article as:

Basic data partition attributes
BitContent
60Read-only
62Hidden
63Do not automount (i.e., do not assign drive letter)

Operating systems support[edit]

See also: UEFI: Disk device compatibility

Hybrid MBRs are non-standard and can be interpreted in different ways by different OSes.[9] Unless otherwise noted, OSes provide precedence to the GPT data when a hybrid MBR configuration is encountered.

The term No native support on this arch and version. should be understood this way:

Not supported as data disk, [10] only known legacy partitions found in protective MBR are accessible via the OS. Detachable disks: only support for MBR partitioning; No access with end user applications. GPT contained raw data is accessible with third-party administrator tools for low level disk access. True file system level support in read or read-write form might be subject of software from a third-party vendor.

UNIX and Unix-like operating systems[edit]

Details of GPT support on UNIX and  Unix-like operating systems
OS familyVersion or editionPlatformRead and write supportBoot supportNote
FreeBSDSince 7.0IA-32x86-64YesYesIn a hybrid configuration, both GPT and MBR partition identifiers may be used.
LinuxMost of the x86 Linux distributions

Fedora 8+ and Ubuntu 8.04+[11]

IA-32x86-64YesYesNew tools such as gdisk,[12] GNU Parted,[13][14] util-linux v2.23+ fdisk,[15][16] SyslinuxGRUB 0.96 + patches and GRUB 2 have been GPT-enabled.
OS XSince 10.4.0 (some features since 10.4.6)[17]IA-32x86-64YesYesOnly Intel Macintosh computers can boot from GPT.
MidnightBSDSince 0.4-CURRENTIA-32x86-64YesRequires BIOSIn a hybrid configuration, both GPT and MBR partition identifiers may be used.
SolarisSince Solaris 10IA-32x86-64SPARCYesYes[18]
HP-UXSince HP-UX 11.20IA-64YesYes[19]

Windows: 32-bit versions[edit]

Windows does not support EFI on 32-bit platforms, and therefore does not allow booting from GPT partitions.

Details of GPT support on 32-bit editions of Microsoft Windows  [10]
OS versionRelease datePlatformRead or write supportBoot supportNote
Windows XP2001-10-25IA-32NoNo 
Windows Server 20032003-04-24IA-32NoNo 
Windows Server 2003 SP12005-03-30IA-32YesNoMBR takes precedence in hybrid configuration[9]
Windows Vista2006-07-22IA-32YesNoMBR takes precedence in hybrid configuration[9]
Windows Server 20082008-02-27IA-32YesNoMBR takes precedence in hybrid configuration[9]
Windows 72009-10-22IA-32YesNoMBR takes precedence in hybrid configuration[9]
Windows 82012-08-01IA-32YesNoMBR takes precedence in hybrid configuration[9]

Windows: 64-bit versions[edit]

Details of GPT support on 64-bit editions of Microsoft Windows  [10]
OS versionRelease datePlatformRead and write supportBoot supportNote
Windows XP Professional x64 Edition
Windows Server 2003
2005-04-25[20]x64YesNoMBR takes precedence in hybrid MBR configuration[9]
Windows Server 20032005-04-25IA-64YesYesMBR takes precedence in hybrid MBR configuration[9]
Windows Vista2006-07-22x64YesRequires UEFI[b]MBR takes precedence in hybrid configuration[9]
Windows Server 20082008-02-27x64YesRequires UEFIMBR takes precedence in hybrid configuration[9]
Windows Server 20082008-02-27IA-64YesYesMBR takes precedence in hybrid configuration[9]
Windows 7
Windows Server 2008 R2
2009-10-22x64YesRequires UEFIMBR takes precedence in hybrid configuration.[9]
Windows Server 2008 R22009-10-22IA-64YesYesMBR takes precedence in hybrid configuration[9]
Windows 8
Windows Server 2012
2012-08-01x64YesRequires UEFIMBR takes precedence in hybrid configuration.[9]

Partition type GUIDs[edit]

Operating systemPartition typeGlobally unique identifier (GUID)[A]
(None)Unused entry00000000-0000-0000-0000-000000000000
MBR partition scheme024DEE41-33E7-11D3-9D69-0008C781F39F
EFI System partitionC12A7328-F81F-11D2-BA4B-00A0C93EC93B
BIOS Boot partition[B]21686148-6449-6E6F-744E-656564454649
Intel Fast Flash (iFFS) partition (for Intel Rapid Start technology)[21][22]D3BFE2DE-3DAF-11DF-BA40-E3A556D89593
Sony boot partition[F]F4019732-066E-4E12-8273-346C5641494F
Lenovo boot partition[F]BFBFAFE7-A34F-448A-9A5B-6213EB736C22
WindowsMicrosoft Reserved Partition (MSR)E3C9E316-0B5C-4DB8-817D-F92DF00215AE
Basic data partition[C]EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
Logical Disk Manager (LDM) metadata partition5808C8AA-7E8F-42E0-85D2-E1E90434CFB3
Logical Disk Manager data partitionAF9B60A0-1431-4F62-BC68-3311714A69AD
Windows Recovery EnvironmentDE94BBA4-06D1-4D40-A16A-BFD50179D6AC
IBM General Parallel File System (GPFS) partition37AFFC90-EF7D-4E96-91C3-2D7AE055B174
HP-UXData partition75894C1E-3AEB-11D3-B7C1-7B03A0000000
Service PartitionE2A1E728-32E3-11D6-A682-7B03A0000000
LinuxLinux filesystem data[C]0FC63DAF-8483-4772-8E79-3D69D8477DE4
RAID partitionA19D880F-05FC-4D3B-A006-743F0F84911E
Swap partition0657FD6D-A4AB-43C4-84E5-0933C84B4F4F
Logical Volume Manager (LVM) partitionE6D6D379-F507-44C2-A23C-238F2A3DF928
/home partition[23]933AC7E1-2EB4-4F13-B844-0E14E2AEF915
/srv partition[23]3B8F8425-20E0-4F3B-907F-1A25A76F98E8
Plain dm-crypt partition[24][25]7FFEC5C9-2D00-49B7-8941-3EA10A5586B7
LUKS partition[24][25]CA7D7CCB-63ED-4C53-861C-1742536059CC
Reserved8DA63339-0007-60C0-C436-083AC8230908
FreeBSDBoot partition83BD6B9D-7F41-11DC-BE0B-001560B84F0F
Data partition516E7CB4-6ECF-11D6-8FF8-00022D09712B
Swap partition516E7CB5-6ECF-11D6-8FF8-00022D09712B
Unix File System (UFS) partition516E7CB6-6ECF-11D6-8FF8-00022D09712B
Vinum volume manager partition516E7CB8-6ECF-11D6-8FF8-00022D09712B
ZFS partition516E7CBA-6ECF-11D6-8FF8-00022D09712B
Mac OS XHierarchical File System Plus (HFS+) partition48465300-0000-11AA-AA11-00306543ECAC
Apple UFS55465300-0000-11AA-AA11-00306543ECAC
ZFS[D]6A898CC3-1DD2-11B2-99A6-080020736631
Apple RAID partition52414944-0000-11AA-AA11-00306543ECAC
Apple RAID partition, offline52414944-5F4F-11AA-AA11-00306543ECAC
Apple Boot partition426F6F74-0000-11AA-AA11-00306543ECAC
Apple Label4C616265-6C00-11AA-AA11-00306543ECAC
Apple TV Recovery partition5265636F-7665-11AA-AA11-00306543ECAC
Apple Core Storage (i.e. Lion FileVault) partition53746F72-6167-11AA-AA11-00306543ECAC
SolarisBoot partition6A82CB45-1DD2-11B2-99A6-080020736631
Root partition6A85CF4D-1DD2-11B2-99A6-080020736631
Swap partition6A87C46F-1DD2-11B2-99A6-080020736631
Backup partition6A8B642B-1DD2-11B2-99A6-080020736631
/usr partition[D]6A898CC3-1DD2-11B2-99A6-080020736631
/var partition6A8EF2E9-1DD2-11B2-99A6-080020736631
/home partition6A90BA39-1DD2-11B2-99A6-080020736631
Alternate sector6A9283A5-1DD2-11B2-99A6-080020736631
Reserved partition6A945A3B-1DD2-11B2-99A6-080020736631
6A9630D1-1DD2-11B2-99A6-080020736631
6A980767-1DD2-11B2-99A6-080020736631
6A96237F-1DD2-11B2-99A6-080020736631
6A8D2AC7-1DD2-11B2-99A6-080020736631
NetBSD[E][26]Swap partition49F48D32-B10E-11DC-B99B-0019D1879648
FFS partition49F48D5A-B10E-11DC-B99B-0019D1879648
LFS partition49F48D82-B10E-11DC-B99B-0019D1879648
RAID partition49F48DAA-B10E-11DC-B99B-0019D1879648
Concatenated partition2DB519C4-B10F-11DC-B99B-0019D1879648
Encrypted partition2DB519EC-B10F-11DC-B99B-0019D1879648
ChromeOS[27]ChromeOS kernelFE3A2A5D-4F32-41A7-B725-ACCC3285A309
ChromeOS rootfs3CB8E202-3B7E-47DD-8A3C-7FF2A13CFCEC
ChromeOS future use2E0A753D-9E48-43B0-8337-B15192CB1B5E
Haiku[28]Haiku BFS42465331-3BA3-10F1-802A-4861696B7521
MidnightBSD[E][29]Boot partition85D5E45E-237C-11E1-B4B3-E89A8F7FC3A7
Data partition85D5E45A-237C-11E1-B4B3-E89A8F7FC3A7
Swap partition85D5E45B-237C-11E1-B4B3-E89A8F7FC3A7
Unix File System (UFS) partition0394EF8B-237E-11E1-B4B3-E89A8F7FC3A7
Vinum volume manager partition85D5E45C-237C-11E1-B4B3-E89A8F7FC3A7
ZFS partition85D5E45D-237C-11E1-B4B3-E89A8F7FC3A7
CephCeph Journal[G]BFBFAFE7-A34F-448A-9A5B-6213EB736C22
Ceph dm-crypt Encrypted Journal[G]45B0969E-9B03-4F30-B4C6-5EC00CEFF106
Ceph OSD[G]4FBD7E29-9D25-41B8-AFD0-062C0CEFF05D
Ceph dm-crypt OSD[G]4FBD7E29-9D25-41B8-AFD0-5EC00CEFF05D
Ceph disk in creation[G]89C57F98-2FE5-4DC0-89C1-F3AD0CEFF2BE
Ceph dm-crypt disk in creation[G]89C57F98-2FE5-4DC0-89C1-5EC00CEFF2BE

A. ^ The GUIDs in this table are written assuming a little-endian byte order. For example, the GUID for an EFI System partition is written as { C12A7328-F81F-11D2-BA4B-00A0C93EC93B} here, which corresponds to the 16 byte sequence 28h 73h 2Ah C1h 1Fh F8h D2h 11h BAh 4Bh 00h A0h C9h 3Eh C9h 3Bh — only the first three blocks are byte-swapped.

B. ^ The formation of this GUID does not follow the GUID definition; it is formed by using the ASCII codes for the string " Hah!IdontNeedEFI". Such formation of "GUID" value breaks down the guaranteed uniqueness of GUID.

C. a b Previously Linux used the same GUID for the data partitions as Windows (Basic data partition: { EBD0A0A2-B9E5-4433-87C0-68B6B72699C7}). Linux never had a separate unique partition type GUID defined for its data partitions. This created problems when dual-booting Linux and Windows in UEFI-GPT setup. The new GUID (Linux filesystem data: { 0FC63DAF-8483-4772-8E79-3D69D8477DE4}) was defined jointly by GPT fdisk and GNU Parted developers. It is identified as type code 0x8300 in GPT fdisk. (See definitions in gdisk's parttypes.cc)

D. a b The GUID for /usr on Solaris is used as a generic GUID for ZFS by Mac OS X.

E. a b NetBSD and MidnightBSD had used the FreeBSD GUIDs before their unique GUIDs were created.

F. a b Some computer manufacturers have their own GUIDs for partitions that are analogous to the EFI System Partition, but that hold boot loaders to launch manufacturer-specific recovery tools. [30]

G. ^ The Ceph filesystem uses GUIDs to mark the state of preparation a disk is in. [31]

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值