I have a 128GB USB 3.0 pendrive in which I want to create a persistent live USB using mkusb. I also want to create a separate usbdata partition to store files as described here, but using the latest versions of mkusb-dus
and mkusb-plug
, I have only managed to create either a persistence partition or a usbdata partition, not both at the same time. Is there any way to achieve this?
Thank you all in advance for your help.
Edit:
To clarify, when I use the standard method of dus-persistent from mkusb-dus as mentioned in the ubuntu help wiki, I always get the following error (My USB drive is /dev/sdc
)
'/dev/sdc3' could not be mounted.
Poweroff and cold boot for dus-persistent to make persistent live drives again!
I am only able to successfully run the methods from mkusb-plug
which result in either a persistence partition or a usbdata partition
Edit 2: I have also attached the mkusb log for everyone's convenience.
The mkusb console window displays,
or the file ~/mkusb.log contains:
output from the engine behind the zenity curtain.
[sudo] password for kumaresh: ---------------------------------------------
start [mkusb 11.2.2] @ 2023-03-28 01:04:06 PM IST
Current directory=/home/kumaresh
main: usbonly=true
main: liveonly=true
No input file specified yet
main: source=''
TERM=unknown
ubuntu
tput: unknown terminal "unknown"
/usr/sbin/mkusb-11: line 1033: [: -lt: unary operator expected
menu_shell:
select_source: imagefile=/home/kumaresh/Desktop/DATA/OS/ubuntu-22.04.2-2023.03.28-desktop-amd64.iso
menu_shell:
menu_shell:
imagefile=/home/kumaresh/Desktop/DATA/OS/ubuntu-22.04.2-2023.03.28-desktop-amd64.iso
Booted from: /dev/sdb
ans=1
***** tu=/dev/sdc ****************************************************
selected target partition table: 'gpt'
mkusb cannot install 'grub-pc' in installed systems in UEFI mode.
'grub-pc' is is used to make persistent live drives bootable in BIOS mode.
You *can* install 'grub-pc' in all live systems, so if you want a persistent
live system, that can boot in BIOS mode, you should run mkusb in BIOS mode
or in a live or persistent live session in UEFI mode.
mount: /tmp/tmp.sXOH6ziQdm: WARNING: source write-protected, mounted read-only.
Ubuntu 22.04.2 2023.03.28 LTS "Custom Jammy Jellyfish"
chk4ubuntu_upgrades: mkusb-11
can set the security upgrade action (the default action of the persistent
live system when security upgrades are available). This method works for
Ubuntu family operating systems and some 're-spins'. You are installing
Ubuntu 22.04.2 2023.03.28 LTS "Custom Jammy Jellyfish"
This can change 'Download and install automatically' to 'Display immediately'
set security upgrade action to 'Display immediately'
The boot system for UEFI must be fetched from the ISO file
mount: /tmp/tmp.Fqp509xv7v: WARNING: source write-protected, mounted read-only.
select_boot_system: [if installed, use] usb-pack_efi=true
'/home/kumaresh/Desktop/DATA/OS/ubuntu-22.04.2-2023.03.28-desktop-amd64.iso' is identified as the source ISO file
MODEL NAME FSTYPE LABEL MOUNTPOINT SIZE
SanDisk 3.2Gen1 sdc 114.6G
├─sdc1 ntfs usbdata 25.8G
├─sdc2 977K
├─sdc3 vfat usbboot 244.1M
├─sdc4 11.2G
└─sdc5 ext4 writable 77.4G
Using the file '/usr/share/mkusb/grub.cfg'
Clean for a GUID partition table
GPT fdisk (gdisk) version 1.0.8
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N):
Command (? for help):
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.
Wipe the first megabyte (mibibyte) to get a clean boot area
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.104682 s, 10.0 MB/s
lsblk: /dev/mmcblk?: not a block device
Selected percentage of remaining space for persistence = 70
preparing /dev/sdc3 ---------------------------------------------
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.0798508 s, 13.1 MB/s
umount: /dev/sdc3: not mounted.
mkfs.fat 4.2 (2021-01-31)
/dev/sdc3 has 255 heads and 63 sectors per track,
hidden sectors 0x1000;
logical sector size is 512,
using 0xf8 media descriptor, with 249795 sectors;
drive number 0x80;
filesystem has 2 32-bit FATs and 1 sector per cluster.
FAT size is 1922 sectors, and provides 245919 clusters.
There are 32 reserved sectors.
Volume ID is 8ff3e441, no volume label.
preparing /dev/sdc1 ---------------------------------------------
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.0873121 s, 12.0 MB/s
umount: /dev/sdc1: not mounted.
Cluster size has been automatically set to 4096 bytes.
Creating NTFS volume structures.
Creating root directory (mft record 5)
Creating $MFT (mft record 0)
Creating $MFTMirr (mft record 1)
Creating $LogFile (mft record 2)
Creating $AttrDef (mft record 4)
Creating $Bitmap (mft record 6)
Creating $Boot (mft record 7)
Creating backup boot sector.
Creating $Volume (mft record 3)
Creating $BadClus (mft record 8)
Creating $Secure (mft record 9)
Creating $UpCase (mft record 0xa)
Creating $Extend (mft record 11)
Creating system file (mft record 0xc)
Creating system file (mft record 0xd)
Creating system file (mft record 0xe)
Creating system file (mft record 0xf)
Creating $Quota (mft record 24)
Creating $ObjId (mft record 25)
Creating $Reparse (mft record 26)
Syncing root directory index record.
Syncing $Bitmap.
Syncing $MFT.
Updating $MFTMirr.
Syncing device.
mkntfs completed successfully. Have a nice day.
preparing /dev/sdc5 ---------------------------------------------
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.186855 s, 5.6 MB/s
umount: /dev/sdc5: not mounted.
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 18947328 4k blocks and 4743168 inodes
Filesystem UUID: c213b42e-ceee-4e5a-82b3-3ab57bcd1b0b
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424
Allocating group tables: 0/579 done
Writing inode tables: 0/579 done
Creating journal (131072 blocks): done
Writing superblocks and filesystem accounting information: 0/579 done
mount: /tmp/tmp.Fqp509xv7v: /mnt/DATA Laptop/OS/ubuntu-22.04.2-2023.03.28-desktop-amd64.iso is already mounted.
fatlabel: warning - lowercase labels might not work properly on some systems
tune2fs 1.46.5 (30-Dec-2021)
source=/home/kumaresh/Desktop/DATA/OS/ubuntu-22.04.2-2023.03.28-desktop-amd64.iso
item 60
umount: /dev/sdc3: no mount point specified.
mount /dev/sdc3 /tmp/tmp.bbFV72Q8jR
mount: /tmp/tmp.bbFV72Q8jR: special device /dev/sdc3 does not exist.
'/dev/sdc3' could not be mounted
umount: /dev/loop-control: not mounted.
umount: /dev/loop1: not mounted.
umount: /dev/loop10: not mounted.
umount: /snap/cups/872: target is busy.
umount: /dev/loop12: not mounted.
umount: /dev/loop13: not mounted.
umount: /dev/loop14: not mounted.
umount: /dev/loop15: not mounted.
umount: /dev/loop16: not mounted.
umount: /dev/loop17: not mounted.
umount: /dev/loop18: not mounted.
umount: /dev/loop19: not mounted.
umount: /snap/canonical-livepatch/164: target is busy.
umount: /dev/loop20: not mounted.
umount: /dev/loop21: not mounted.
umount: /dev/loop22: not mounted.
umount: /dev/loop23: not mounted.
umount: /dev/loop24: not mounted.
umount: /dev/loop25: not mounted.
umount: /dev/loop26: not mounted.
umount: /dev/loop27: not mounted.
umount: /dev/loop28: not mounted.
umount: /dev/loop29: not mounted.
umount: /dev/loop3: not mounted.
umount: /dev/loop30: not mounted.
umount: /snap/snapd/18596: target is busy.
umount: /dev/loop32: not mounted.
umount: /dev/loop33: not mounted.
umount: /dev/loop34: not mounted.
umount: /dev/loop35: not mounted.
umount: /dev/loop4: not mounted.
umount: /dev/loop5: not mounted.
umount: /dev/loop6: not mounted.
umount: /dev/loop7: not mounted.
umount: /dev/loop8: not mounted.
umount: /dev/loop9: not mounted.
Terminated
Cleanup after mkusb finished :-)
Zenity error log-file 'zerrlog'=/tmp/tmp.LRVwFndrxX
login attempt 1
When I attempt to mount the device using the command mount /dev/sdc3
in the terminal, I get the error of no mount option present in /etc/fstab
. However, when I open the disks
utility in Ubuntu and attempt to mount the partition, there are no issues.
In addition, here is the output of sudo fdisk -l /dev/sdc
Disk /dev/sdc: 114.6 GiB, 123048296448 bytes, 240328704 sectors
Disk model: SanDisk 3.2Gen1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 30F8ECAA-8F3A-4A77-BBCE-B94AC547B691
Device Start End Sectors Size Type
/dev/sdc1 175366144 240326655 64960512 31G Microsoft basic data
/dev/sdc2 2048 4095 2048 1M BIOS boot
/dev/sdc3 4096 253951 249856 122M EFI System
/dev/sdc4 253952 23787519 23533568 11.2G Linux filesystem
/dev/sdc5 23787520 175366143 151578624 72.3G Linux filesystem
Partition table entries are not in disk order.
Edit 3: After deleting all the partitions from the pendrive, reformatting to NTFS, and using another custom Ubuntu ISO created with Cubic, and using mkusb-dus 23 as suggested by @sudodus, the problem seems to be resolved.
Edit 4: The issue seems to be related to NTFS partitions. When the ISO is stored in an NTFS partition with the following /etc/fstab
entry, the aforementioned error occurs.
UUID=01D94304BCDF47E0 /mnt/DATA\040Laptop ntfs-3g uid=1000,gid=1000,rw,user,exec,umask=000,x-gvfs-show 0 0
The error occurs regardless of the mount option being ntfs-3g
(Traditional FUSE NTFS driver) or ntfs3
(The new kernel level NTFS driver). As soon as the file is moved to an Ext4 partition, the process completes successfully. The mount options are configured for proton compatibility in Steam.
Edit 5: Please find attached the pastebin from the system-info
tool here as requested by @sudodus
Edit 6: The issue seems to be related not to the NTFS partition itself, but the fact that I accessed the ISO through a symlink in the browse menu of mkdus. When I access the ISO through the root directory structure, there are no issues. I tried accessing the ISO through a symlink to an Ext4 partition as well, and the same issue occurred.
Edit 7: To anyone who is interested, here is the updated system-info
log without any truncation or errors.
Edit 8: Please find attached the mkusb log using the latest mkusb version 23.1.1
---------------------------------------------
Usage: mkusb [input-file] # optional parameter
---------------------------------------------
d: dus , guidus, mkusb-dus - Classic, easy to use
p: Plug, mkusb-plug - New, easy to use
n: NoX, sudo mkusb-nox - original text mode
b: Bas, sudo mkusb-bas - basic text mode for old/basic linux
e: Eleven, sudo -H mkusb-11 - Old user interface
q: Quit
---------------------------------------------
Select version of mkusb (d/p/n/b/e/q) d
dus 23.1.1
[sudo] password for kumaresh:
live system or temporary superuser permissions
p_toolsel starts here ...
----- p_persistent: make persistent live drive -----
Crude estimate of possible mkusb tools/methods to create
persistent live drive from the selected iso file:
/home/kumaresh/Desktop/DATA/OS/ubuntu-22.04.2-2023.03.29-desktop-amd64.iso
live system or temporary superuser permissions
menuentry "Try or Install Ubuntu" {
live system or temporary superuser permissions
Works with dus-persistent according to name
Works with dus-iso2usb according to name
Persistent live by mkusb-plug according to name
---------------------------------------------
Drive that contains source file: /dev/sdb
Live drive, that is booted from: /dev/sdb
Drive with a partition in fstab: /dev/sda
cands=1
sdc
USB_SanDisk_3.2Gen1
114.6G
usb
USB or memory card
p_target: target=/dev/sdc
target drive size = 123 GB
Binary files /usr/share/mkusb/grub.img.xz and /usr/share/mkusb/grub-0.img.xz differ
settings=
percent=75
Prepare persistent live system from
'/home/kumaresh/Desktop/DATA/OS/ubuntu-22.04.2-2023.03.29-desktop-amd64.iso'
to the target device (drive) '/dev/sdc'
MODEL NAME FSTYPE LABEL SIZE
SanDisk 3.2Gen1 sdc 114.6G
sdc1 ntfs usbdata 25.7G
sdc2 977K
sdc3 vfat usbboot 244.1M
sdc4 iso9660 Ubuntu 22.04.2 2023.03.29 LTS 11.4G
sdc5 ext4 writable 77.2G
/home/kumaresh/Desktop/DATA/OS/ubuntu-22.04.2-2023.03.29-desktop-amd64.iso
/dev/sdc
75
settings=
-----
live system or temporary superuser permissions
/home/kumaresh/Desktop/DATA/OS/ubuntu-22.04.2-2023.03.29-desktop-amd64.iso
/dev/sdc
75
settings=
source=/home/kumaresh/Desktop/DATA/OS/ubuntu-22.04.2-2023.03.29-desktop-amd64.iso
target=/dev/sdc
percent=75
msdos=false
upefi=false
dni=false
source=/home/kumaresh/Desktop/DATA/OS/ubuntu-22.04.2-2023.03.29-desktop-amd64.iso
ls -l /home/kumaresh/Desktop/DATA/OS/ubuntu-22.04.2-2023.03.29-desktop-amd64.iso
-rwxrwxrwx 1 kumaresh kumaresh 12263471104 Mar 29 01:00 /home/kumaresh/Desktop/DATA/OS/ubuntu-22.04.2-2023.03.29-desktop-amd64.iso
---------------------------------------------
start [dus-persistent 23.1.1] @ 2023-04-23 11:44:35 PM IST
---------------------------------------------
Making a USB boot drive or memory card ..........................
running operating system: ubuntu
grub_n_iso "$source" "$target" "$result"
grub_n_iso /home/kumaresh/Desktop/DATA/OS/ubuntu-22.04.2-2023.03.29-desktop-amd64.iso /dev/sdc
***** tu=/dev/sdc ****************************************************
selected target partition table: 'gpt'
mount: /tmp/dus.CvOxaam1lx: WARNING: source write-protected, mounted read-only.
target version (from iso file) 22.04
host version (where dus runs) 22.04
version 22.04 boots best with grubimg and usb-pack_efi (auto-set)
layerfs=false
---------------------------------------------
mount: /tmp/dus.s1td8Kvxgb: WARNING: source write-protected, mounted read-only.
select_boot_system: usb-pack_efi is available
select_boot_system: usb-pack_efi: using variable 'upefi=true'
item 00
drels=22.04
distr=ubuntu
'/home/kumaresh/Desktop/DATA/OS/ubuntu-22.04.2-2023.03.29-desktop-amd64.iso' is identified as the source ISO file
<pre>
MODEL NAME FSTYPE LABEL MOUNTPOINT SIZE
SanDisk 3.2Gen1 sdc 114.6G
|-sdc1 ntfs usbdata 25.7G
|-sdc2 977K
|-sdc3 vfat usbboot 244.1M
|-sdc4 iso9660 Ubuntu 22.04.2 2023.03.29 LTS 11.4G
`-sdc5 ext4 writable 77.2G
</pre>
Using the file '/usr/share/mkusb/grub.cfg'
item 10
Clean for a GUID partition table
GPT fdisk (gdisk) version 1.0.8
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N):
Command (? for help):
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.
Wipe the first megabyte (mibibyte) to get a clean boot area
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.2289 s, 4.6 MB/s
Wait 5 seconds and a little more ...
item 20
Installed systems in UEFI mode: 'grub.img' to be used
---------------------------------------------
Selected percentage of remaining space for persistence = 75
---------------------------------------------
partition 2 - bios_grub installing via 'grub.img'
partition 3 - fat32 boot,efi via 'grub.img' ...
62989+0 records in
62989+0 records out
258002944 bytes (258 MB, 246 MiB) copied, 8.62517 s, 29.9 MB/s
GPT fdisk (gdisk) version 1.0.8
Caution: invalid backup GPT header, but valid main header; regenerating
backup header from main header.
Warning! Main and backup partition tables differ! Use the 'c' and 'e' options
on the recovery & transformation menu to examine the two tables.
Warning! One or more CRCs don't match. You should repair the disk!
Main header: OK
Backup header: ERROR
Main partition table: OK
Backup partition table: ERROR
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: damaged
****************************************************************************
Caution: Found protective or hybrid MBR and corrupt GPT. Using GPT, but disk
verification and recovery are STRONGLY recommended.
****************************************************************************
Command (? for help):
Caution: The CRC for the backup partition table is invalid. This table may
be corrupt. This program will automatically create a new backup partition
table when you save your partitions.
Problem: The secondary header's self-pointer indicates that it doesn't reside
at the end of the disk. If you've added a disk to a RAID array, use the 'e'
option on the experts' menu to adjust the secondary header's and partition
table's locations.
Identified 2 problems!
Command (? for help):
Expert command (? for help): Relocating backup data structures to the end of the disk
Expert command (? for help):
Recovery/transformation command (? for help):
Recovery/transformation command (? for help):
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.
partition 1 - ntfs 'usbdata'
partition 4 - iso9660 - cloned system
Warning: The resulting partition is not properly aligned for best performance: 503907s % 2048s != 0s
partition 5 - ext4 - for persistence
Warning: The resulting partition is not properly aligned for best performance: 24494141s % 2048s != 0s
item 30
using grub.img: keeping file system of /dev/sdc3:
item 40
preparing /dev/sdc1 ---------------------------------------------
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.123108 s, 8.5 MB/s
umount: /dev/sdc1: not mounted.
Cluster size has been automatically set to 4096 bytes.
Creating NTFS volume structures.
Creating root directory (mft record 5)
Creating $MFT (mft record 0)
Creating $MFTMirr (mft record 1)
Creating $LogFile (mft record 2)
Creating $AttrDef (mft record 4)
Creating $Bitmap (mft record 6)
Creating $Boot (mft record 7)
Creating backup boot sector.
Creating $Volume (mft record 3)
Creating $BadClus (mft record 8)
Creating $Secure (mft record 9)
Creating $UpCase (mft record 0xa)
Creating $Extend (mft record 11)
Creating system file (mft record 0xc)
Creating system file (mft record 0xd)
Creating system file (mft record 0xe)
Creating system file (mft record 0xf)
Creating $Quota (mft record 24)
Creating $ObjId (mft record 25)
Creating $Reparse (mft record 26)
Syncing root directory index record.
Syncing $Bitmap.
Syncing $MFT.
Updating $MFTMirr.
Syncing device.
mkntfs completed successfully. Have a nice day.
preparing /dev/sdc5 ---------------------------------------------
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.232945 s, 4.5 MB/s
umount: /dev/sdc5: not mounted.
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 20234488 4k blocks and 5062656 inodes
Filesystem UUID: 2cf0d9b1-df83-4ed9-b634-c6d062ae959f
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424
Allocating group tables: done
Writing inode tables: done
Creating journal (131072 blocks): done
Writing superblocks and filesystem accounting information: done
item 50
mount: /tmp/dus.s1td8Kvxgb: /mnt/DATA Laptop/OS/ubuntu-22.04.2-2023.03.29-desktop-amd64.iso is already mounted.
fatlabel: warning - lowercase labels might not work properly on some systems
Ubuntu or an Ubuntu family flavour
22.04
23.03
label on partition for persistence: 'writable'
tune2fs 1.46.5 (30-Dec-2021)
---------------------------------------------
source=/home/kumaresh/Desktop/DATA/OS/ubuntu-22.04.2-2023.03.29-desktop-amd64.iso
---------------------------------------------
item 60
umount: /dev/sdc3: no mount point specified.
mount /dev/sdc3 /tmp/dus.GJtbPpk9sf
mount: /tmp/dus.GJtbPpk9sf: special device /dev/sdc3 does not exist.
'/dev/sdc3' could not be mounted
umount: /dev/loop-control: not mounted.
umount: /dev/loop1: not mounted.
umount: /dev/loop10: not mounted.
umount: /snap/cups/872: target is busy.
umount: /dev/loop12: not mounted.
umount: /dev/loop13: not mounted.
umount: /dev/loop14: not mounted.
umount: /dev/loop15: not mounted.
umount: /dev/loop16: not mounted.
umount: /dev/loop17: not mounted.
umount: /dev/loop18: not mounted.
umount: /dev/loop19: not mounted.
umount: /snap/canonical-livepatch/202: target is busy.
umount: /dev/loop20: not mounted.
umount: /dev/loop21: not mounted.
umount: /dev/loop22: not mounted.
umount: /dev/loop23: not mounted.
umount: /dev/loop24: not mounted.
umount: /dev/loop25: not mounted.
umount: /dev/loop26: not mounted.
umount: /dev/loop27: not mounted.
umount: /dev/loop28: not mounted.
umount: /dev/loop29: not mounted.
umount: /dev/loop3: not mounted.
umount: /dev/loop30: not mounted.
umount: /dev/loop31: not mounted.
umount: /dev/loop32: not mounted.
umount: /dev/loop33: not mounted.
umount: /dev/loop34: not mounted.
umount: /dev/loop35: not mounted.
umount: /snap/snapd/18933: target is busy.
umount: /dev/loop37: not mounted.
umount: /dev/loop38: not mounted.
umount: /dev/loop39: not mounted.
umount: /dev/loop4: not mounted.
umount: /dev/loop40: not mounted.
umount: /dev/loop5: not mounted.
umount: /dev/loop6: not mounted.
umount: /dev/loop7: not mounted.
umount: /dev/loop8: not mounted.
umount: /dev/loop9: not mounted.
Terminated
Cleanup after dus-persistent finished :-)
p_clean:
live system or temporary superuser permissions
clean if necessary and return
clean if necessary and quit
I will attempt the same procedure from a different Ubuntu distro via LiveUSB and see if I can replicate the issue.
Edit 9: Please find attached the output of the command sudo ls -l /dev/sdc3
as requested by @sudodus
brw-rw---- 1 root disk 8, 35 Apr 24 00:25 /dev/sdc3
Output of ls -l /dev/sdc
brw-rw---- 1 root disk 8, 32 Apr 24 00:25 /dev/sdc