-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathddchanges.txt
153 lines (123 loc) · 6.34 KB
/
ddchanges.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
TODO
====
- notrunc feature (the default on UNIX seems unfriendly, do we want to do the same?)
dd for windows (incorrectly) has notrunc enabled by default. Perhaps we should
implement trunc for people who want it
- AWS init mode - use case 1 - EBS Restored from snapshot
- http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/EBSPerformance.html
There is a significant increase in latency when you first access each block of data on a new EBS volume that was restored from a snapshot. You can avoid this performance hit by accessing each block prior to putting the volume into production. This process is called initialization (formerly known as pre-warming). For more information, see http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ebs-initialize.html
C:\>dd if=\\.\PHYSICALDRIVEn of=/dev/null bs=1M --progress --size
- AWS init mode - use case 2 - instance storage
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/disk-performance.html
Because of the way that Amazon EC2 virtualizes disks, the first write to any location on most instance store volumes performs more slowly than subsequent writes. For most applications, amortizing this cost over the lifetime of the instance is acceptable. However, if you require high disk performance, we recommend that you initialize your drives by writing once to every drive location before production use.
http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/InstanceStorage.html
1.0beta1
========
- Now built with lazarus
- 32 bit and 64 bit versions available
- Built with buildkite & AWS EC2 build server
- CVS source converted and imported into GitHub
0.6beta3
========
- add errorlevel exit code
- progress is written to stderr
0.6beta2
========
- Implemented of=/dev/null which will just throw away the data
- skip on stdin now works
- fix checking size of floppy disks
0.6beta1
========
- --progress output is in the same unit as bs is specified with
- new filter type 'file' which will Only write to a fileystem file
- new feature id=<drive>/od=<drive> for input disk and output disk.
if <drive> is the only partition on a disk, then the entire disk is selected
if you insert a USB disk and it is mounted as f: then 'id=f:' will select the
USB disk (not just the partition like if=\\.\f: would do)
0.5
===
- count, seek and skip can now use a multiplicative suffix like bs
- stdin and stdout are now the defaults
0.4beta6
========
- Implemented of=- for stdout
- Renamed if=- for stdin
- Messages are now printed to stderr
0.4beta5
========
- If a partial block write fails, the buffer is padded to the end of the block and the write is attempted again.
This allows disk images which are not an exact multiple of the block size to be written to disk.
0.4beta4
========
- Implemented if=stdin
- added --filter=<filter> to limit the types of devices which can be written to
<filter> can be one of:
fixed Only write to a fixed disk
removable Only write to a removable disk
disk Only write to any kind of disk
partition Only write to a partition
These filters may change in the future.
- set default filter by renaming to dd-<filter>.exe (eg. dd-removable.exe can only write to removable disks)
0.4beta2
========
- --list shows disk and partition sizes
- --size added
0.4beta1
========
- --list shows correct syntax for drive letters
- virtual devices added
0.3 -> 0.4
==========
- rrtool runs on Linux
0.2 -> 0.3
==========
- Modified native device scan to find noncontigiously numbered devices
- Show symlink destinations in device scan
- Open source file with FILE_SHARE_READ
- Stupid bug opening native output devices (assigned handle to input instead of
output)
- Stupid bug where native devices were always read only
- addedd progress indicator
WTF is the deal with all the device names?
==========================================
With every version of windows, the real name of disks and partitions changes.
If you realy want to know what is going on, grab a copy of System Internals
WinObj.
There are 2 main sets of devices. Those which are exported to the Win32
namespace and those which can only be accessed from NT Native API.
Win32 devices names are also called "Dos Devices" and are opened using the Win32
CreateFile function (This means Create a File handle, which may refer to an
already existing file). The filename is passed in as '\\.\devicename'.
This gets confusing because the "Dos Devices" are stored inside the NT directory
called '\??' so the Win32 API converts '\\.\devicename' into '\??\devicename'.
For these "Dos Devices", dd uses the prefix '\\.'. When it sees this prefix it
open the device using the Win32 API like a normal file.
The other devices are only exported into the NT object namespace. These devices
are normally in the 'Device' directory so for example, the first cdrom CdRom0
is called '\Device\CdRom0'. This name must be passed into NtCreateFile so dd
introduces a special prefix '\\?' to indicate this. Therefor, 'dd --list' will
show names like '\\?\Device\CdRom0'
Multiple names
Unfortunatly, there are multiple ways to identify a single device. Each version
of windows is different but normally there is only a single device and the
alternative name is a symbolic link. Symbolic links will be familiar to Unix
users but for the sake of Windows users, it is like a shortcut to another file.
These symbolic links can only exist in the NT object namespace and are not
generaly exported to Win32. (AFAIK, the normal NT filesystems do not suport
Unix like symbolic links, though there is no reason why they couldn't)
'dd --list' will print out the destination of a link under the name of the
device. These links are always is the NT namespace and start with '\\?'.
You can use these links to match up which devices from each namespace are
indeed the same device.
Simple eh?
Unmounting devices
==================
Before writing to a device, it is probably a good idea to make sure that it is
not mounted. This is especially important if you will be writing a new
partition table. For this reason dd also implements a --unmount=<mount point>
flag. This will unmount the particular mount point. This should only be used
for removable media. The flag can be combined with regular dd options and can
be used multiple times to unmount from multiple locations
dd --umount=i:\
WARNING: This removes the drive letter assignment. To restore the drive letter
you may have to use the Disk Manager (diskmgmt.msc)!