         start      : undefined
         stop       : undefined
         repeat     : false       # if true, will loop around, repeatedly backing up, over and over again; opts.cb (if defined) will get called every time it completes a backup cycle.
+        projects   : undefined   # if given, only backup *this* list of projects (list of project id's)
         cb         : undefined
     dbg = (m) -> winston.debug("backup_all_projects: #{m}")
     errors = {}
-    projects = undefined
+    projects = opts.projects
     async.series([
         (cb) ->
+            if projects?
+                cb(); return
             dbg("querying database...")
             database.select
                 table   : 'projects'

                            if output?.stderr? and output.stderr.indexOf('does not exist') != -1
                                err = undefined
                        cb(err)
        (cb) ->
            dbg("throw in a umount, just in case")
            create_user

                    project_id : project_id
                    cb         : (err) ->
                        if err
                            dbg("err -- #{err}, so move project #{project_id} out of the way, then try exactly one more time from scratch")
                            async.series([
                                (cb0) ->
                                    dbg("moving #{project_id} out of the way")
                                    t = filesystem("DELETED-#{cassandra.now()}-#{project_id}")
                                    misc_node.execute_code
                                        command     : "sudo"
                                        args        : ['zfs', 'rename', filesystem(project_id), t]
                                        timeout     : 300
                                        err_on_exit : true
                                        cb          : cb0
                                (cb0) ->
                                    dbg("trying one more time to backup #{project_id}")
                                    backup_project
                                        project_id : project_id
                                        cb         : cb0
                            ], (err) ->
                                if err
                                    errors[project_id] = err
                                cb()
                            )
                        else
                            cb()
            async.mapLimit(projects, opts.limit, f, cb)
    ], (err) ->
        if err
