15

I have an Amazon EC2 instance which has given me a tiny '/' partition and a large '/mnt' partition. As such, I have moved my mysql data-dir over to the /mnt partition. However I am now having issues with the /tmp folder running out of space on my massive join queries and am trying to also move /tmp to /mnt/tmp. I tried to do this with a symlink but that results in the mysql service being unable to start.

Please advise on how to move the storage of /tmp over to /mnt (/dev/xvdb)

12

You can bind the /tmp mount point to /mnt/tmp:

sudo mount -B /tmp /mnt/tmp
  • Fantastic! easy once you know how. – Programster Nov 5 '13 at 18:01
  • 4
    One thing you have to be very aware of is that the /mnt partition is ephemeral storage. If you stop your instance (or it degrades and AWS moves it), the data in /mnt will be lost. It is recommended (especially for your MySQL) to mount an EBS volume, and use that for data you want to be persistent. – Kevin Willock Nov 5 '13 at 23:37
  • @KevinWillock I think that his /mnt (by the size) is persistent (or he mounted something there which is persistent) since he is actually saving data there. BTW, you may actually want to ping him (using @) since I'm almost sure didn't got pinged. – Braiam Nov 5 '13 at 23:45
  • @Braiam I didn't get pinged but checked this thread again by luck. Kevin would be correct that this is ephemeral storage. I know that this is highly unsafe but was done deliberately for testing performance of using local storage. If I was to use such a system, I would be making sure to replicate to an EBS volume or RDS itself and backing up from there. I am well aware of the risks. – Programster Nov 7 '13 at 11:48
  • 1
    Do I need to execute that command on every reboot? – hithwen Apr 21 '14 at 14:11
2

Moving a "/tmp" partition requires some extra not suggested in this wrong answer https://askubuntu.com/a/371628/298086.

Moving data implies erase data from original partition once cloned to destination one, what is absolutelly not performed by a bind mount.

RECOMENDATION: Read this brilliant post if you wanna understand what a bind mount is https://unix.stackexchange.com/a/198591

If you give a try to the right mount option ("MOVE", not bind):

mount -M /tmp /mnt/tmp

I'm convinced it will fail reporting that "tmp is a shared mountpoint" (what indeed means "I cannot move a mountpoint if still being any process using it")

The "answer" you are looking for, may require stopping and restarting services using/accessing /tmp, before moving content.

You can list those services/processes by running:

lsof +D /tmp/

So once you listed what is actually accessing/using /tmp, is when you can reallly decide "how to act".

In my opinion most safe way passes-by

  1. Stopping all services accessing /tmp (if you can do that)
  2. Copying entirely /tmp contents to a new place
  3. Editing /etc/fstab and changing /tmp mount point physical location (no matter if is a bind or device mount)
  4. Restarting the system to perform the remount

But there is another way what does not require system restart, but is not safer as previous one. It is described here and consists in umounting /tmp in a lazy way, what should allow you to execute mount -M

This two links will be helpful for your demand:

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.