How to create a Windows 7 installation usb media from linux ? (to install Windows 7) - Help need to know better method
2014-01
I have been reading some web pages and posts here and in other forums about how to create a Windows 7 installation Usb media (to install windows 7 using a usb) from linux.
I asked in technet about this , and they give me general ideas about how to do it
I personally am not very familiar with linux, but basicaly all that you need to do... in whatever way you do it is the following:
Format a usb flash drive, either fat32 or ntfs create a partition that is large enough to host the windows installation (give or take 3GB for 64bit, aroudn 2.5gb for 32bit) and mark that partition as active/bootable. Since this can be done with windows, but just as well with a tool like gparted, you should be able to do the same in debian.
Once you have created that partition, mount the iso that you download, and copy all files starting from the root, into the root of the usb flash drive.
That's all there's to it.
There is a method that i found in various places,that is almost the same that the man of technet has said.
But,there is a step,that in that method is done,that i don't know if it is really necessary,or not.
Not allways dd works.Basically, the missing step was to write a proper boot sector to the usb stick, which can be done from linux with ms-sys. This works with the Win7 retail version.
Here is the complete rundown again:
Install ms-sys
Check what device your usb media is asigned - here we will assume it is /dev/sdb. Delete all partitions, create a new one taking up all the space, set type to NTFS, and set it bootable:
*# cfdisk /dev/sdb*
Create NTFS filesystem:
*# mkfs.ntfs -f /dev/sdb1*
Mount iso and usb media:
*# mount -o loop win7.iso /mnt/iso
# mount /dev/sdb1 /mnt/usb*
Copy over all files:
*# cp -r /mnt/iso/* /mnt/usb/*
Write Windows 7 MBR on usb stick:
*# ms-sys -7 /dev/sdb*
...and you're done.
Shouldn't the usb work without doing the last step "# ms-sys -7 /dev/sdb" or to make the usb bootable , is a must , not only to mark the partition as bootable ?
Would be better use rsync instead of cp -r ?
All this steps should be done as root, i suppose , or if not , chmod to 664 and chown the directories where are mounted the usb and the iso, no ?
But i suppose that the easier thing is to copy the data as root , and that this will not affect to the data.
Has anyone tried this method or some similar like copying the iso with dd ?
I have tried with dd (dd if=/file/win7.iso of=/dev/sdb), and it doesn't work.
My steps to make it work: Install ms-sys gparted to create partition, and create NTFS filesystem.
# mount -o loop win7.iso /mnt/iso # mount /dev/sdb1 /mnt/usb *# cp -r /mnt/iso/* /mnt/usb/* # ms-sys -7 /dev/sdb
Nacheteee
The ms-sys
command is important. With the -7
option it creates a Windows 7 compatible boot sector on your flash drive.
You can't use dd because ISO's use an ISO Filesystem such as UDF or ISO9660, where-as your USB drive only properly supports disk file systems such as ext3, FAT32, or NTFS
Would be better use rsync instead of cp -r ?
Not really. cp -r
works perfectly fine. Just realize that NTFS handles permissions differently to Linux, so using rsync to keep everything intact doesn't matter too much. All that really matters is that the files from the ISO are on the USB and that the boot sector is formatted correctly using ms-sys -7
You can do all the steps as root if you want. The only 2 steps that really require root are mkfs
and the 2 mount
's
If you're getting permission problems even as root, you may need to mount your USB using ntfs-3g /dev/sdb1
as some Linux Distributions only supply a Read-Only driver for NTFS.
I have somehow managed to write an iso 9660 image onto my USB drive, which makes all my computer think that the device is actually a CD. I have tried various methods of removing this partition, but nothing seems to work. I have tried fdisk
, which says
$ fdisk -l /dev/sdb Cannot open /dev/sdbparted crashes when I try to use it on this device.
I have even tried
$ dd if=/dev/zero of=/dev/sdbbut it just hangs with no output (either on screen or on disk). However, when I plug the USB in, it does mount, and I can view (but not edit) the files on it.
edit: now the result is
$ dd if=/dev/zero of=/dev/sdb dd: opening `/dev/sdb': Read-only file system
I have also tried re-formatting it on Windows, but it gets to the end of the format process and then says "Couldn't format the drive".
How can I remove this partition and get my whole USB drive back to normal again?
EDIT 1: Trying a simple mkfs
doesn't work:
$ sudo mkfs -t vfat /dev/sdb mkfs.vfat 3.0.0 (28 Sep 2008) mkfs.vfat: Will not try to make filesystem on full-disk device '/dev/sdb' (use -I if wanted)I can't do
mkfs
on /dev/sdb1
because there is no such partition, as shown:$ ls /dev | grep sdb sdb
EDIT 2: This is the information posted by dmesg when I plug the device in:
$ dmesg . . (snip) . usb 2-1: New USB device found, idVendor=058f, idProduct=6387 usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 usb 2-1: Product: Mass Storage usb 2-1: Manufacturer: Generic usb 2-1: SerialNumber: G0905000000000010885 usb-storage: device found at 4 usb-storage: waiting for device to settle before scanning usb-storage: device scan complete scsi 6:0:0:0: Direct-Access FLASH Drive AU_USB20 8.07 PQ: 0 ANSI: 2 sd 6:0:0:0: [sdb] 4069376 512-byte hardware sectors (2084 MB) sd 6:0:0:0: [sdb] Write Protect is off sd 6:0:0:0: [sdb] Mode Sense: 03 00 00 00 sd 6:0:0:0: [sdb] Assuming drive cache: write through sd 6:0:0:0: [sdb] 4069376 512-byte hardware sectors (2084 MB) sd 6:0:0:0: [sdb] Write Protect is off sd 6:0:0:0: [sdb] Mode Sense: 03 00 00 00 sd 6:0:0:0: [sdb] Assuming drive cache: write through sdb: unknown partition table sd 6:0:0:0: [sdb] Attached SCSI removable disk sd 6:0:0:0: Attached scsi generic sg2 type 0 ISO 9660 Extensions: Microsoft Joliet Level 3 ISO 9660 Extensions: RRIP_1991A SELinux: initialized (dev sdb, type iso9660), uses genfs_contexts CE: hpet increasing min_delta_ns to 15000 nsecThis shows that the device is formatted as ISO 9660 and that it is
/dev/sdb
.
EDIT 3: This is the message that I find at the bottom of dmesg
after running cfdisk
and writing a new partition table to the disk:
SELinux: initialized (dev sdb, type iso9660), uses genfs_contexts sd 17:0:0:0: [sdb] Device not ready: Sense Key : Not Ready [current] sd 17:0:0:0: [sdb] Device not ready: <> ASC=0xff ASCQ=0xffASC=0xff <> ASCQ=0xff end_request: I/O error, dev sdb, sector 0 Buffer I/O error on device sdb, logical block 0 lost page write due to I/O error on sdb
Okay, it turns out that in this case something (possibly when I wrote the iso-9660 file system to the drive) has triggered some form of internal write protection on the drive. There are no external write protection / hold switches, but yet this is the output in dmesg
when I run
dd if=/dev/zero of=/dev/sdb
as root:
sd 9:0:0:0: [sdb] Add. Sense: Write protected end_request: I/O error, dev sdb, sector 4028744 sd 9:0:0:0: [sdb] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE,SUGGEST_OK sd 9:0:0:0: [sdb] Sense Key : Data Protect [current] Info fld=0x0
Note the comments in there about protection! However, when I plug the device in, I get,
scsi 10:0:0:0: Direct-Access FLASH Drive AU_USB20 8.07 PQ: 0 ANSI: 2 sd 10:0:0:0: [sdb] 4069376 512-byte hardware sectors (2084 MB) sd 10:0:0:0: [sdb] Write Protect is off sd 10:0:0:0: [sdb] Mode Sense: 03 00 00 00 sd 10:0:0:0: [sdb] Assuming drive cache: write through sd 10:0:0:0: [sdb] 4069376 512-byte hardware sectors (2084 MB) sd 10:0:0:0: [sdb] Write Protect is off sd 10:0:0:0: [sdb] Mode Sense: 03 00 00 00 sd 10:0:0:0: [sdb] Assuming drive cache: write through
Note that this message says that the device is not write protected! So unfortunately, it looks like the disk has had it (i.e kaput).
Looking at the dmesg
snippet, it seems something is automaticaly mounting the drive (check with mount
). Before doing anything with it, you should umount it by hand.
Then zero the block with the partition table (dd if=/dev/zero of=... bs=512 count=1
), and run a partitioning tool to recreate an empty partition table. After that, unplug and replug (should not be needed, but...) and create/format the partitions you want on it. After creating the partitions (perhaps you will have to unplug and replug again), you should have /dev/sdb1
or something like that, which is where you should create the filesystem.
Note that all steps should be done as root (with sudo
or an equivalent). Be careful to not write the wrong device name, or you could wipe your harddisk!
I had the exact same problem as you. However, I was able to find a solution from a surprising place. An old laptop with Windows 98SE on it, which is the last Windows system I ever owned. Anyway just put it in and when you try to access the drive Windows will ask you if you'd like to format it. Click yes and you'll have a fat16 formatted drive that's fully functional. I don't know if it works with newer versions of Windows though. Best of luck.
I am new to this Linux sys admin stuff, so when I had exactly the same problem I poked and prodded with no madness to my method but managed to remove the iso9660 fs and reclaim the thumb drive.
$ sudo fdisk -l /dev/sdb1
returned
Disk /dev/sdb1: 16.0 GB, 16037969920 bytes 64 heads, 32 sectors/track, 15295 cylinders, total 31324160 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I>/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x57155aa7
Device Boot Start End Blocks Id System
/dev/sdb1p1 2048 31324159 15661056 5 Extended
So I then tried
$ sudo fdisk /dev/sdb1
Command (m for help): m Command action . . .
followed by
Command (m for help): d Extended Selected partition 1
Command (m for help): v Remaining 31324159 unallocated 512-byte sectors
Then when prompted again selected for fdisk to create an empty dos partition table (something I figured I could overwrite with whatever I wanted later)
Command (m for help): v Remaining 31324159 unallocated 512-byte sectors
Command (m for help): o Building a new DOS disklabel with disk identifier 0xea06616f. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m for help): w The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 22: Invalid argument. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks.
I took the returned messages to mean that I at least "broke" the iso9660 fs so went on to try mkfs
dcantwell@LASOKA:~$ sudo mkfs /dev/sdb1 mke2fs 1.41.14 (22-Dec-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 979200 inodes, 3915520 blocks .195776 blocks (5.00%) reserved for the super user First data block=0 .Maximum filesystem blocks=4009754624 120 block groups 32768 blocks per group, 32768 fragments per group 8160 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208
Writing inode tables: done
Writing superblocks and filesystem accounting information: doneThis filesystem will be automatically checked every 28 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
All this left me with the "lost+found" directory on the thumb drive.
dcantwell@LASOKA:~$ sudo mount /dev/sdb1 /media/ dcantwell@LASOKA:~$ ls /media/ lost+found
Finally, I went to the Ubuntu website (http://www.ubuntu.com/download/ubuntu/download, section 2) and used the stick to create a bootable image of Ubuntu for trial use, and it let me. The beauty of the Ubuntu images made on the stick this way is that they can be deleted easily and the stick reclaimed for other use.
I mention this very last step because in hindsight I wonder if I had done just that in the first place that it would have worked, I dunno. As mentioned, I am new to this Linux stuff and am trying different distro's (e.g. Fedora, Ubuntu, etc.) on live cd's with whatever media is most convenient, and I sure do break a lot of shit along the way.
mkdosfs -I /dev/sdb
will create a vfat file system on the drive. The -I has to be passed if you want the file system to be created on the entire drive and not on a partition. If you want to partition the drive first, use fdisk. Of course fdisk can't read the drive now, because it doesn't have any partitions. But I'm sure it will be able to write to it.
Remove the drive and see if you can still read from it. I wonder if somehow /dev/usb (or wherever you read from) has become an ordinary file directory.
Have you tried to re-mount it with -t option?
umount /dev/sdb
sudo mount -t vfat /dev/sdb /mnt/point
If that won't work, I'll try to reproduce it later, when I get home. Seems like an interesting problem. Will be fun to tinker with :]
I still feel that we are assuming something that's going to turn out to be untrue. Since the device is readable, this line will at least let you see the data for yourself, rather than depending on the other programs' interpretations.
dd if=/dev/sdb count=1 | xxd -g1 -u
Also, maybe we could separate problems with the dev node from problems with what's on the device, by forcing it onto another port. Either plug it into another USB jack, or plug another drive in first, to occupy sdb.
Currently your USB drive got no partition table, iso9660 filesystem sits directly on whole disk (just like a cdrom)
sd 6:0:0:0: [sdb] Assuming drive cache: write through
sdb: unknown partition table
I think you need make a partition first
sudo cfdisk /dev/sdb
(make sure it's not mounted before) in the fdisk application create a new partition.
after that is done, make the filesystem on the new partition
sudo mkfs -t vfat /dev/sdb1
Maybe with a simple
mkfs -t vfat /dev/sdb1
Last night I did
dd if=fedora.iso of=sdx
After four hours I had an unbootable, unchangeable, iso9660 brick. Following David's train of thought, I called Ubuntu's 'startup disk creator' (Type 'startup disk creator' in the dash), and merely selected 'erase'. That did it.
The USB drive was then reported as FAT32 and all is well.
U3 has a utility to remove their U3 partition. It also removes the partition/device created by the utility that creates the iso 9660. This has been confirmed only on a u3 usb stick, but it is able to be formatted now and totally recover the entire space as a flash drive. You might give it a shot.