How to efficiently partition a single Windows-Ubuntu dual boot disk?

I know Windows well but Ubuntu not so well

(or the other way around)

Both Windows and Ubuntu are POSIX compliant operating systems and they both allow you to define which user has access to which individual file, directory, partition or disk!

But they do it just a little bit differently (There are full-time jobs for people who have to clean up wrong ownership of data all day long!)

So take the average hard disk:

Windows Installed

If you have more then 1 partition, you're probably running an UEFI system. Please, do not delete any of those partitions! Concentrate on the biggest partition you have and use that one in the following exercise...

Depending on your use case give each OS enough space for its own system and applications (the below numbers are the minimum and recommended system requirements, so you should multiply them by a factor that is comfortable for your use case)

  • Windows 10 : 20 GB minimum, >=32GB recommended
  • Windows 8 : 20 GB minimum, N/A recommended
  • Windows 7 : 20 GB minimum, >=35GB recommended
  • Windows Vista : 15 GB minimum, >=35GB recommended
  • Windows XP : 4 GB minimum, N/A recommended
  • Ubuntu Desktop : 4 GB minimum, 25GB recommended
  • Ubuntu Server : 1 GB minimum, 25GB recommended

Note: Ubuntu also needs a swap partition of a size described here.

The rest of the disk (-10%) can be given to a data partition formatted to NTFS from gparted See note below so that you arrive at the following lay-out:

Partitioning - Medium

Then:

  • Install Windows
  • Create all your users under Windows
  • Install Ubuntu
  • Create all your users under Ubuntu giving them both the same name and the same password as under Windows.
  • Boot the Ubuntu Live CD again and run gparted and shrink both Windows and Ubuntu partitions until they take twice to thrice the amount of the pale yellow bar. Then create the data partition and format it to "ntfs"
  • mount this partition in your fstab (E.g. /media/data)

The following steps credit to:user68186, copied from here

  • Move your data directories to the /Data mount point by pressing Ctrl+Alt+T and copy-paste each line followed by Enter (replace "UserName" by your user name):

      md /media/data/UserName
      md /media/data/UserName/{bin,Desktop,Documents,Downloads,Music,Pictures,Public,Templates,Videos}
      mv /home/UserName/bin /media/data/UserName/bin
      mv /home/UserName/Desktop /media/data/UserName/Desktop
      mv /home/UserName/Documents /media/data/UserName/Documents
      mv /home/UserName/Downloads /media/data/UserName/Downloads
      mv /home/UserName/Music /media/data/UserName/Music
      mv /home/UserName/Pictures /media/data/UserName/Pictures
      mv /home/UserName/Public /media/data/UserName/Public
      mv /home/UserName/Templates /media/data/UserName/Templates
      mv /home/UserName/Videos /media/data/UserName/Videos
    
  • Make symbolic links for your user to the above directories somewhere else

      ln -s /media/data/UserName/bin/ bin
      ln -s /media/data/UserName/Desktop/ Desktop
      ln -s /media/data/UserName/Documents/ Documents
      ln -s /media/data/UserName/Downloads/ Downloads
      ln -s /media/data/UserName/Music/ Music
      ln -s /media/data/UserName/Pictures/ Pictures 
      ln -s /media/data/UserName/Public/ Public 
      ln -s /media/data/UserName/Templates/ Templates 
      ln -s /media/data/UserName/Videos/ Videos
    
  • Go to Windows again and move the user directories to your D: drive in the users directory.

Why?

When you boot into Windows (or Ubuntu), both Windows and Ubuntu have their own system files and applications installed in their own environment. On top of that, you don't have to worry about which file goes where: All Ubuntu files can be found under Windows in the d:\home directory and all your Windows files can be found under the /users directory in Ubuntu.

If you use any of the following:

  • Ubuntu commands: chown, chmod or Windows command: cacls,
  • if you use any of the file managers to right-click on directories or files to use set permissions

then please do not set permissions from inside Windows in the D:\home nor from inside Ubuntu on the /Users directory ever! Also, do not move files between /users and /home (or D:\home and D:\Users) ever! ###Only copy files!

(and then delete the original because moving will try to move the permissions from one totally different file system to another and that'll give you troubles you want to avoid)

Why is there 10% unallocated space on your drive? Well, that's a little trick when your PC is brand new: you don't need all that space, and that free space is your proverbial spare tire if you ever need to extend one of the other partitions when they run flat! ;-)

Now go back to step 5 of the How to Install Ubuntu and continue there...


I'm an expert at both Windows and Ubuntu

Good! Welcome! :-) You've probably read the non-expert versions above and wondered what's in it for you...
Well, I'm not going to tell you that:

  • creating 4 primary partitions on one single MBR drive is locking yourself in a corner (though some of the users above will have them on a GPT drive),
  • nor what partitioning scheme to use to install your OS: that's what the FHS and the Microsoft Server Install Guidelines are for
  • nor that Microsoft server isn't really a POSIX compliant server any more, but an Interix subsystem.
  • to speed up boot, put your OS files on the SSD for both Ubuntu and Windows and your data files on the HDD
  • it is a bad idea to create swap space on an SSD (though it's getting better) for both Ubuntu and Windows.

You know all that, right?

Well, what you might not know about interoperability between NTFS and Ubuntu is that:

  • File ownership and permissions can be interoperable between Windows and Ubuntu.
  • Windows-Unix compatible ACLs can be defined
  • That Windows Junction points can be seen as Ubuntu symbolic links.
  • Creating and updating compressed files can be supported.

However, you must

  • use correct mount options: inherit, permissions, streams_interface=windows, hide_hid_files, windows_names, compression
  • creating a /.NTFS-3G/UserMapping file with ntfs-3g.usermap and then manually edit it (permissions above not needed)
  • To be able to do an image back-up, mount the volume with ro and efs_raw
  • Do the administration of complex rights always on the host system!
  • Use the ntfs-3g-advanced driver (to get all bells and whistles)
  • Create ACLs (recompile driver, set option --enable-posix-acls in the configure command)
  • Create Windows Junctions on Windows and define them in /.NTFS-3G/ (E.g. /.NTFS-3G/D:/Users)

For all the whistles and bells: man ntfs-3g and the advanced options article by one of the creators of ntfs-3g.


I'm a beginning user of Windows and/or Ubuntu

Both Windows and Ubuntu are advanced operating systems that allow you to define which user has access to which individual file, directory, partition or disk! But defining all these access rights can be a cumbersome task. (There are full-time jobs of people just doing this all day long!)

So take the average hard disk with Windows installed:

Windows Installed

If you have more then 1 partition, you're probably running an UEFI system. Please, do not delete any of those partitions! Concentrate on the biggest partition you have and use that one in the following exercise...

You can see from the light yellow colour that it's only partially used. If it's more then 50% full, you should be saving money already to buy a bigger hard disk. If it's more then 80% full, stop reading this answer now and upgrade your hard disk first! ;-)

The ideal situation is to give:

  • 40% of disk space to Windows (shrink the partition)
  • 40% to Ubuntu (create an EXT4 partition)
  • 20% to common use between both. (create a FAT32 partition: the maximum volume size is 8TB if you don't need Windows 2000 compatibility)
  • Ideally, also create a swap partition of a size described here.

If you followed the rules above you will get:

Partitioning - Beginner

Why? When you boot into Windows (or Ubuntu), each OS has their own system files and applications installed in their own environment.

Sometimes you want to have files common to both OSes (Music? Videos?) and that is where the 3rd partition comes in: That is a drive that shows up as your D: drive under Windows and as your /home/YourUserName/data directory under Ubuntu. You can safely store any file there and neither of the OSes can mess up the ownership, the rights to the files, ... as it's basically like a large USB stick but on your hard disk (FAT32)

Warning: The maximum file size on your /data volume (D: on Windows) is 4GB!

Now go back to step 4 of the Official installation instructions and continue there...