Skip to main content

Temporary Scratch Space

Palmetto provides a space to store intermediate scratch data that is accessible on every node.

The two current scratch file systems are: /scratch, and /local_scratch.

Avoid Data Loss

Take care not to leave precious research results or programming assignments in scratch space for very long. Move files you need to keep to a permanent storage medium.

danger

Scratch spaces are never backed up. Files deleted or automatically purged from scratch space are permanently destroyed. Our support team cannot recover files stored in scratch space.

Shared Scratch (/scratch)

A large amount of scratch space is available to all users on the cluster through the shared scratch space.

We have designed the shared scratch file system to be resilient against hardware failure. If a disk fails, in most cases the system can continue operating without data loss. However, understand that no backups are available.

Shared Scratch Limits

Every Palmetto user has their own directory in /scratch under their username (/{filesystem}/{username}). There are larger limits (compared to your home directory) to the number and size of the files you can store in your scratch space.

Limit DescriptionMaximum Value
Per-User Storage Quota5 TB
Per-User File Count5 million files
Need a higher limit on /scratch for your account?

If you need to increase your Storage Limit or File Count Limit on /scratch please reach out to us by submitting a support ticket.

Include what you'd like the new usage to be and a comprehensive explanation as to why it is needed. We may ask to discuss your workflow to see if it can be changed so that you fit within the limits.

How do I check how many files I have in shared scratch?

You can use the following commands to check your file count on the scratch system. These should be run from a compute node.

srun bash -c 'find -type f /scratch/$USER | wc -l'
How do I check my disk space usage on shared scratch?

You can use the checkquota command to check your file count on the scratch file system. This command must be run from the login node.

[rcdstudent@vm-slurm-p-login01 ~]$ checkquota

Quota infomation for rcdstudent

Path : /home/rcdstudent
Total Capacity : 250.0 GiB
Used : 1.64 GiB
------------------------------------
Path : /scratch/rcdstudent
Total Capacity : 5.0 TiB
Used : 451.62 GiB
------------------------------------

Shared Scratch Purge Schedule

To ensure that space remains available for everyone, our system will periodically purge old files.

This purge happens every day at 1:00 AM EDT.

During the purge, files on scratch will be deleted if ALL of the following are true:

  • the file has not been accessed/read within the last 30 days
  • the file has not been modified within the last 30 days
  • the file has not had a metadata change within the last 30 days
How can I check the date a file was last accessed or modified?

You can check the time which an individual file was last accessed or modified using the stat command.

user@login001 $ stat /scratch/user/file1
File: file1
Size: 0 Blocks: 0 IO Block: 524288 regular empty file
Device: 2dh/45d Inode: 73496411419974474 Links: 1
Access: (0644/-rw-r--r--) Uid: (342429/ bfgodfr) Gid: (10000/ cuuser)
Access: 2023-01-23 10:44:10.000000000 -0500
Modify: 2023-01-23 10:44:10.000000000 -0500
Change: 2023-01-23 10:44:10.000000000 -0500
Birth: -

The following explains each timestamp:

OutputMeaning
Access:the date and time the file was last accessed
Modify:the date and time the file was last modified
Change:the date and time of the last metadata change on this file

You can see a list of all of your files, sorted by their access date, by running this command:

srun find /scratch/$USER -type f -printf "%A+ %p\n" | sort -n

You can see a list of all of your files, sorted by their modify date, by running this command:

srun find /scratch/$USER -type f -printf "%A+ %p\n" | sort -n
Can I get a list of files that are at risk of being purged?

To see a list of your files on /scratch that are at risk of being purged within the next day, you can run:

srun find /scratch/$USER -type f -a \( -atime +29 -a -mtime +29 -a -ctime +29 \)

To see a list that may be purged in the next week, you can look at the same, but for 22 days ago:

srun find /scratch/$USER -type f -a \( -atime +22 -a -mtime +22 -a -ctime +22 \)
Can I just touch or copy my files to avoid the purge?

Altering or copying files for the express purpose of circumventing the purge system is prohibited. If our administrators detect this behavior, your files may be manually purged without notice.

The intent is for scratch file systems to only be used as temporary space. We encourage users to move intermediate and final results off of scratch space as soon as possible when they are not being used.

If you are struggling to make your workflow function within the purge window, please submit a support ticket. We want to make sure our users are able to complete their research and keep valuable data, while also keeping the system available for other users. Our team can work with you to find a solution.

Local Scratch (/local_scratch)

Every Palmetto compute node has storage on the node itself and is referred to as /local_scratch. This scratch space can only be accessed by a job running on the node. The file system for /local_scratch has no hardware failure protection and is never backed up.

To access this space in your Slurm job script, use the $TMPDIR environment variable or the location /local_scratch/slurm.$SLURM_JOBID. If you are using multiple nodes, further setup is required.

caution

Files in /local_scratch will be purged automatically when your job terminates. Copy files elsewhere before your job ends.

You can see the amount of local scratch storage using the df command:

user@node $ df --human-readable --output=size /local_scratch/
Size
414G
note

Local scratch space is shared between all jobs running on a node at the same time.

How do I set up local scratch for use on multiple nodes?

When running a multiple node job and you want to access this local storage on each node, the Slurm job script must first set up the local storage on each node in the following way:

# copy data TO /local_scratch FROM your source ON EACH NODE in the job
srun --ntasks-per-node=1 \
cp /path/to/remote/dir/{input files} $TMPDIR/{input files}

# ... run your other commands here ...

# copy data FROM /local_scratch BACK TO your source ON EACH NODE in the job
srun --ntasks-per-node=1 \
cp $TMPDIR/{output files} /path/to/remote/dir/$node/{output files}