Create partitions

Welcome to fdisk <removed>.
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 <removed>.

Command (m for help): Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): Partition number (1-4, default 1): First sector (2048-102399, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-102399, default 102399): 
Created a new <removed>.

Command (m for help): Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): Partition number (2-4, default 2): First sector (22528-102399, default 22528): Last sector, +sectors or +size{K,M,G,T,P} (22528-102399, default 102399): 
Created a new <removed>.

Command (m for help): Partition type
   p   primary (2 primary, 0 extended, 2 free)
   e   extended (container for logical partitions)
Select (default p): Partition number (3,4, default 3): First sector (43008-102399, default 43008): Last sector, +sectors or +size{K,M,G,T,P} (43008-102399, default 102399): 
Created a new <removed>.

Command (m for help): Partition type
   p   primary (3 primary, 0 extended, 1 free)
   e   extended (container for logical partitions)
Select (default e): 
Selected partition 4
First sector (63488-102399, default 63488): Last sector, +sectors or +size{K,M,G,T,P} (63488-102399, default 102399): 
Created a new <removed>.

Command (m for help): All primary partitions are in use.
Adding logical partition 5
First sector (65536-102399, default 65536): Last sector, +sectors or +size{K,M,G,T,P} (65536-102399, default 102399): 
Created a new <removed>.

Command (m for help): All primary partitions are in use.
Adding logical partition 6
First sector (77824-102399, default 77824): Last sector, +sectors or +size{K,M,G,T,P} (77824-102399, default 102399): 
Created a new <removed>.

Command (m for help): All primary partitions are in use.
Adding logical partition 7
First sector (90112-102399, default 90112): Last sector, +sectors or +size{K,M,G,T,P} (90112-102399, default 102399): 
Created a new <removed>.

Command (m for help): Disk <removed>: 50 MiB, 52428800 bytes, 102400 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / <removed> bytes
Disklabel type: dos
Disk identifier: <removed>

Device     Boot Start    End Sectors Size Id Type
<removed>p1       2048  22527   20480  10M 83 Linux
<removed>p2      22528  43007   20480  10M 83 Linux
<removed>p3      43008  63487   20480  10M 83 Linux
<removed>p4      63488 102399   38912  19M  5 Extended
<removed>p5      65536  75775   10240   5M 83 Linux
<removed>p6      77824  88063   10240   5M 83 Linux
<removed>p7      90112 102399   12288   6M 83 Linux

Command (m for help): 
