Persistent Memory Documentation
HomePMDKNDCTLBlog
  • Persistent Memory Documentation
  • Getting Started Guide
    • Introduction
    • PMDK Introduction
    • NDCTL Introduction
    • System Requirements
    • Creating Development Environments
      • Linux Environments
        • Using the memmap Kernel Option
        • Advanced Topics
          • Partitioning Namespaces
          • I/O Alignment Considerations
      • Windows Environments
      • Virtualization
        • Windows Server Hyper-V
        • Using QEMU Virtualization
        • VMware VSphere/ESXi
      • Cloud Environments
        • Microsoft Azure Cloud
        • Google Cloud Platform (GCP)
    • Installing NDCTL
    • Installing PMDK
      • PMDK Directory Structure
      • Installing PMDK using Linux Packages
      • Installing PMDK from Source on Linux
      • Installing PMDK on Windows
  • IPMCTL User Guide
  • NDCTL User Guide
Powered by GitBook
On this page
  1. Getting Started Guide
  2. Creating Development Environments
  3. Linux Environments
  4. Advanced Topics

Partitioning Namespaces

It is possible to partition raw, sector, and fsdax devices (namespaces) using tools such as fdisk, parted, or gparted, etc. This is useful to meet application space requirements.

The following shows how to partition a new namespace with no existing partition table using fdisk and parted. If an existing partition table exists, delete or modify the entries first. The example uses a 256GB FSDAX device (namespace) and creates 2 x 100GB and 1 x ~50GB partitions on which filesystems can be created.

WARNING: Data could or will be lost. Backup the data before proceeding.

Print the current partition table, if any, using fdisk -l:

$ sudo fdisk -l /dev/pmem0
Disk /dev/pmem0: 245.1 GiB, 263182090240 bytes, 514027520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

1) Launch fdisk for the device (/dev/pmem0)

$ sudo fdisk /dev/pmem0
Welcome to fdisk (util-linux 2.32.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command.
Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0xc637b85f.
Command (m for help):

2) Create the first new 100GB partition using the '(n)ew' command

Command (m for help): n 
Partition type 
    p primary (0 primary, 0 extended, 4 free) 
    e extended (container for logical partitions) 
Select (default p): p 
Partition number (1-4, default 1): 
First sector (2048-514027519, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-514027519, default 514027519): +100G
Created a new partition 1 of type 'Linux' and of size 100 GiB.

3) Create the second new 100GB partition using the '(n)ew' command:

Command (m for help): n 
Partition type 
    p primary (1 primary, 0 extended, 3 free) 
    e extended (container for logical partitions) 
Select (default p):

Using default response p. 
Partition number (2-4, default 2): 
First sector (209717248-514027519, default 209717248): 
Last sector, +sectors or +size{K,M,G,T,P} (209717248-514027519, default 514027519): +100G
Created a new partition 2 of type 'Linux' and of size 100 GiB.

4) Create the last partition using the remaining space:

Command (m for help): n 
Partition type 
    p primary (2 primary, 0 extended, 2 free) 
    e extended (container for logical partitions) Select (default p):

Using default response p. 
Partition number (3,4, default 3): 
First sector (419432448-514027519, default 419432448): 
Last sector, +sectors or +size{K,M,G,T,P} (419432448-514027519, default 514027519):
Created a new partition 3 of type 'Linux' and of size 45.1 GiB.

5) Print the new partition table to verify the changes using the '(p)rint' command:

Command (m for help): p 
Disk /dev/pmem0: 245.1 GiB, 263182090240 bytes, 514027520 sectors 
Units: sectors of 1 * 512 = 512 bytes 
Sector size (logical/physical): 512 bytes / 4096 bytes 
I/O size (minimum/optimal): 4096 bytes / 4096 bytes 
Disklabel type: dos 
Disk identifier: 0xc637b85f

Device       Boot     Start       End   Sectors  Size Id Type
/dev/pmem0p1           2048 209717247 209715200  100G 83 Linux
/dev/pmem0p2      209717248 419432447 209715200  100G 83 Linux
/dev/pmem0p3      419432448 514027519  94595072 45.1G 83 Linux

6) Commit the changes using the '(w)rite' command and return to the shell prompt:

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

#

1) Launch parted and select the device (/dev/pmem0)

$ sudo parted /dev/pmem0
GNU Parted 3.2
Using /dev/pmem0
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)

2) Create the first new 100GB partition using the 'mkpart' command

(parted) mkpart
Partition type?  primary/extended? p
File system type?  [ext2]? ext4
Start? 2MiB
End? 100GiB
(parted)

3) Create the second new 100GB partition using the 'mkpart' command:

(parted) mkpart
Partition type?  primary/extended? p
File system type?  [ext2]? ext4
Start? 100GiB
End? 200GiB

4) Create the last partition using the remaining space (-1MiB):

(parted) mkpart
Partition type?  primary/extended? p
File system type?  [ext2]? xfs
Start? 200GiB
End? -1MiB
(parted) p

5) Print the new partition table to verify the changes using the 'print' command:

(parted) p
Model: NVDIMM Device (pmem)
Disk /dev/pmem0: 263GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos
Disk Flags:

Number  Start   End    Size    Type     File system  Flags
 1      2097kB  107GB  107GB   primary  ext4         lba
 2      107GB   215GB  107GB   primary  ext4         lba
 3      215GB   263GB  48.4GB  primary  xfs          lba

6) Quit parted and return to the shell prompt:

(parted) q
Information: You may need to update /etc/fstab.

The partitions can now be used with DAX enabled filesystems such as EXT4 and XFS and mounted with the -o dax option. The following shows how to create and mount an EXT4 or XFS filesystem.

$ sudo mkfs.ext4 /dev/pmem0p1
$ sudo mkdir /pmem1
$ sudo mount -o dax /dev/pmem0p1 /pmem1
$ sudo mount -v | grep /pmem1
/dev/pmem0p1 on /pmem1 type ext4 (rw,relatime,seclabel,dax,data=ordered)
$ sudo mkfs.xfs /dev/pmem0p1
$ sudo mkdir /pmem1
$ sudo mount -o dax /dev/pmem0p1 /mnt/dax
$ sudo mount -v | grep /pmem1
/dev/pmem0p1 on /pmem1 type xfs (rw,relatime,seclabel,attr2,dax,inode64,noquota)
PreviousAdvanced TopicsNextI/O Alignment Considerations

Last updated 6 years ago