RAMDisk + SSD = Raid 1? Boot OSX
Is it possible to create RAID 1 with RAMDisk and SSD in OSX?
Something like:
Boot Mac, OSX-Partition will be loaded from SSD in RAMDisk. Boot to RAMDisk and use it like any other system-drive. Because of RAID 1 (--write-mostly/write-behind) anything done on RAMDisk will be persisted to SSD. So if I power off the Mac everything will be persisted on SSD and can loaded again during next start...
For better experience the most used applications could be installed to that OSX-System-Partition (SSD) which will also be available in the RAMDisk.
Of course there will be a second "data" partition on the SSD for all the other stuff.
How can I achieve the described setup - is it even possible with OSX? Which Bootloader can I use (Grub?)?
macos boot bootloader raid-1 ramdisk
|
show 2 more comments
Is it possible to create RAID 1 with RAMDisk and SSD in OSX?
Something like:
Boot Mac, OSX-Partition will be loaded from SSD in RAMDisk. Boot to RAMDisk and use it like any other system-drive. Because of RAID 1 (--write-mostly/write-behind) anything done on RAMDisk will be persisted to SSD. So if I power off the Mac everything will be persisted on SSD and can loaded again during next start...
For better experience the most used applications could be installed to that OSX-System-Partition (SSD) which will also be available in the RAMDisk.
Of course there will be a second "data" partition on the SSD for all the other stuff.
How can I achieve the described setup - is it even possible with OSX? Which Bootloader can I use (Grub?)?
macos boot bootloader raid-1 ramdisk
Er.. how big do you plan to have the Ramdisk? Ramdisk is only as big as your RAM. Mac SSD smallest size is 128GB, unless you plan to have 128GB of RAM? I doubt what you want is even possible.. and if you think about it, RAID1 on RAMDISK and SSD, means the RAID set can only work as fast as the slowest component, which is the SSD. You won't get any performance gain, even assuming it is even possible.
– Darius
Mar 3 '16 at 11:38
Thought I can use a software raid (do not know if I am able to use only certain partitions in a hardware raid) to use only one partition with osx installed + some apps (ca. 30GB?). I have 64GB Ram and would use 30GB for RAMDisk (in a RAID 1 with SSD-Partition of equal size). Another possibility could be to buy a small 32GB SSD for that. Thought with "--write-mostly / --write-behind" it is possible to delay the data replication a bit (to buy the ssd some time to cope with the ramdisk).
– mfuesslin
Mar 3 '16 at 11:45
1
Technically this might be possible. If you have two 'drives' (one th ramdisk and one a partition on the SSD - no need to use all of the SSDs space). But it might be more useful to use the standard trick for persistent ramdisks. Akak boot, (automatically) copy data to ramdisk. And on shutdown have a copy back to permanent storage.
– Hennes
Mar 3 '16 at 11:49
@Hennes - that's how I deal with a rather thrashy cache for one application I use. Create RAMDisk & copy out at launch, launch app. At quit, write back to a duplicate cache folder, then after safely copied, swap folders & erase the older one.
– Tetsujin
Mar 3 '16 at 11:58
@Hennes - But then I am not able to speed up OSX environment... Ok its fast enough already but would be still nice to have things opened instantly. But maybe I am able to load a ramdisk after boot and then copy most used apps in there and create a symlink to their pendants in the ramdisk to get them fast started? But then spotlight needs to reindex to let me open the "right" safari (in ram and not the one on my ssd)... mhm... any tricks how this could be an automatic workflow? Should I put the ssd-safari in a non-compressing zip so it is no longer visible to spotlight (so only ram-version is?)
– mfuesslin
Mar 3 '16 at 12:01
|
show 2 more comments
Is it possible to create RAID 1 with RAMDisk and SSD in OSX?
Something like:
Boot Mac, OSX-Partition will be loaded from SSD in RAMDisk. Boot to RAMDisk and use it like any other system-drive. Because of RAID 1 (--write-mostly/write-behind) anything done on RAMDisk will be persisted to SSD. So if I power off the Mac everything will be persisted on SSD and can loaded again during next start...
For better experience the most used applications could be installed to that OSX-System-Partition (SSD) which will also be available in the RAMDisk.
Of course there will be a second "data" partition on the SSD for all the other stuff.
How can I achieve the described setup - is it even possible with OSX? Which Bootloader can I use (Grub?)?
macos boot bootloader raid-1 ramdisk
Is it possible to create RAID 1 with RAMDisk and SSD in OSX?
Something like:
Boot Mac, OSX-Partition will be loaded from SSD in RAMDisk. Boot to RAMDisk and use it like any other system-drive. Because of RAID 1 (--write-mostly/write-behind) anything done on RAMDisk will be persisted to SSD. So if I power off the Mac everything will be persisted on SSD and can loaded again during next start...
For better experience the most used applications could be installed to that OSX-System-Partition (SSD) which will also be available in the RAMDisk.
Of course there will be a second "data" partition on the SSD for all the other stuff.
How can I achieve the described setup - is it even possible with OSX? Which Bootloader can I use (Grub?)?
macos boot bootloader raid-1 ramdisk
macos boot bootloader raid-1 ramdisk
edited Mar 3 '16 at 11:38
asked Mar 3 '16 at 11:32
mfuesslin
2815
2815
Er.. how big do you plan to have the Ramdisk? Ramdisk is only as big as your RAM. Mac SSD smallest size is 128GB, unless you plan to have 128GB of RAM? I doubt what you want is even possible.. and if you think about it, RAID1 on RAMDISK and SSD, means the RAID set can only work as fast as the slowest component, which is the SSD. You won't get any performance gain, even assuming it is even possible.
– Darius
Mar 3 '16 at 11:38
Thought I can use a software raid (do not know if I am able to use only certain partitions in a hardware raid) to use only one partition with osx installed + some apps (ca. 30GB?). I have 64GB Ram and would use 30GB for RAMDisk (in a RAID 1 with SSD-Partition of equal size). Another possibility could be to buy a small 32GB SSD for that. Thought with "--write-mostly / --write-behind" it is possible to delay the data replication a bit (to buy the ssd some time to cope with the ramdisk).
– mfuesslin
Mar 3 '16 at 11:45
1
Technically this might be possible. If you have two 'drives' (one th ramdisk and one a partition on the SSD - no need to use all of the SSDs space). But it might be more useful to use the standard trick for persistent ramdisks. Akak boot, (automatically) copy data to ramdisk. And on shutdown have a copy back to permanent storage.
– Hennes
Mar 3 '16 at 11:49
@Hennes - that's how I deal with a rather thrashy cache for one application I use. Create RAMDisk & copy out at launch, launch app. At quit, write back to a duplicate cache folder, then after safely copied, swap folders & erase the older one.
– Tetsujin
Mar 3 '16 at 11:58
@Hennes - But then I am not able to speed up OSX environment... Ok its fast enough already but would be still nice to have things opened instantly. But maybe I am able to load a ramdisk after boot and then copy most used apps in there and create a symlink to their pendants in the ramdisk to get them fast started? But then spotlight needs to reindex to let me open the "right" safari (in ram and not the one on my ssd)... mhm... any tricks how this could be an automatic workflow? Should I put the ssd-safari in a non-compressing zip so it is no longer visible to spotlight (so only ram-version is?)
– mfuesslin
Mar 3 '16 at 12:01
|
show 2 more comments
Er.. how big do you plan to have the Ramdisk? Ramdisk is only as big as your RAM. Mac SSD smallest size is 128GB, unless you plan to have 128GB of RAM? I doubt what you want is even possible.. and if you think about it, RAID1 on RAMDISK and SSD, means the RAID set can only work as fast as the slowest component, which is the SSD. You won't get any performance gain, even assuming it is even possible.
– Darius
Mar 3 '16 at 11:38
Thought I can use a software raid (do not know if I am able to use only certain partitions in a hardware raid) to use only one partition with osx installed + some apps (ca. 30GB?). I have 64GB Ram and would use 30GB for RAMDisk (in a RAID 1 with SSD-Partition of equal size). Another possibility could be to buy a small 32GB SSD for that. Thought with "--write-mostly / --write-behind" it is possible to delay the data replication a bit (to buy the ssd some time to cope with the ramdisk).
– mfuesslin
Mar 3 '16 at 11:45
1
Technically this might be possible. If you have two 'drives' (one th ramdisk and one a partition on the SSD - no need to use all of the SSDs space). But it might be more useful to use the standard trick for persistent ramdisks. Akak boot, (automatically) copy data to ramdisk. And on shutdown have a copy back to permanent storage.
– Hennes
Mar 3 '16 at 11:49
@Hennes - that's how I deal with a rather thrashy cache for one application I use. Create RAMDisk & copy out at launch, launch app. At quit, write back to a duplicate cache folder, then after safely copied, swap folders & erase the older one.
– Tetsujin
Mar 3 '16 at 11:58
@Hennes - But then I am not able to speed up OSX environment... Ok its fast enough already but would be still nice to have things opened instantly. But maybe I am able to load a ramdisk after boot and then copy most used apps in there and create a symlink to their pendants in the ramdisk to get them fast started? But then spotlight needs to reindex to let me open the "right" safari (in ram and not the one on my ssd)... mhm... any tricks how this could be an automatic workflow? Should I put the ssd-safari in a non-compressing zip so it is no longer visible to spotlight (so only ram-version is?)
– mfuesslin
Mar 3 '16 at 12:01
Er.. how big do you plan to have the Ramdisk? Ramdisk is only as big as your RAM. Mac SSD smallest size is 128GB, unless you plan to have 128GB of RAM? I doubt what you want is even possible.. and if you think about it, RAID1 on RAMDISK and SSD, means the RAID set can only work as fast as the slowest component, which is the SSD. You won't get any performance gain, even assuming it is even possible.
– Darius
Mar 3 '16 at 11:38
Er.. how big do you plan to have the Ramdisk? Ramdisk is only as big as your RAM. Mac SSD smallest size is 128GB, unless you plan to have 128GB of RAM? I doubt what you want is even possible.. and if you think about it, RAID1 on RAMDISK and SSD, means the RAID set can only work as fast as the slowest component, which is the SSD. You won't get any performance gain, even assuming it is even possible.
– Darius
Mar 3 '16 at 11:38
Thought I can use a software raid (do not know if I am able to use only certain partitions in a hardware raid) to use only one partition with osx installed + some apps (ca. 30GB?). I have 64GB Ram and would use 30GB for RAMDisk (in a RAID 1 with SSD-Partition of equal size). Another possibility could be to buy a small 32GB SSD for that. Thought with "--write-mostly / --write-behind" it is possible to delay the data replication a bit (to buy the ssd some time to cope with the ramdisk).
– mfuesslin
Mar 3 '16 at 11:45
Thought I can use a software raid (do not know if I am able to use only certain partitions in a hardware raid) to use only one partition with osx installed + some apps (ca. 30GB?). I have 64GB Ram and would use 30GB for RAMDisk (in a RAID 1 with SSD-Partition of equal size). Another possibility could be to buy a small 32GB SSD for that. Thought with "--write-mostly / --write-behind" it is possible to delay the data replication a bit (to buy the ssd some time to cope with the ramdisk).
– mfuesslin
Mar 3 '16 at 11:45
1
1
Technically this might be possible. If you have two 'drives' (one th ramdisk and one a partition on the SSD - no need to use all of the SSDs space). But it might be more useful to use the standard trick for persistent ramdisks. Akak boot, (automatically) copy data to ramdisk. And on shutdown have a copy back to permanent storage.
– Hennes
Mar 3 '16 at 11:49
Technically this might be possible. If you have two 'drives' (one th ramdisk and one a partition on the SSD - no need to use all of the SSDs space). But it might be more useful to use the standard trick for persistent ramdisks. Akak boot, (automatically) copy data to ramdisk. And on shutdown have a copy back to permanent storage.
– Hennes
Mar 3 '16 at 11:49
@Hennes - that's how I deal with a rather thrashy cache for one application I use. Create RAMDisk & copy out at launch, launch app. At quit, write back to a duplicate cache folder, then after safely copied, swap folders & erase the older one.
– Tetsujin
Mar 3 '16 at 11:58
@Hennes - that's how I deal with a rather thrashy cache for one application I use. Create RAMDisk & copy out at launch, launch app. At quit, write back to a duplicate cache folder, then after safely copied, swap folders & erase the older one.
– Tetsujin
Mar 3 '16 at 11:58
@Hennes - But then I am not able to speed up OSX environment... Ok its fast enough already but would be still nice to have things opened instantly. But maybe I am able to load a ramdisk after boot and then copy most used apps in there and create a symlink to their pendants in the ramdisk to get them fast started? But then spotlight needs to reindex to let me open the "right" safari (in ram and not the one on my ssd)... mhm... any tricks how this could be an automatic workflow? Should I put the ssd-safari in a non-compressing zip so it is no longer visible to spotlight (so only ram-version is?)
– mfuesslin
Mar 3 '16 at 12:01
@Hennes - But then I am not able to speed up OSX environment... Ok its fast enough already but would be still nice to have things opened instantly. But maybe I am able to load a ramdisk after boot and then copy most used apps in there and create a symlink to their pendants in the ramdisk to get them fast started? But then spotlight needs to reindex to let me open the "right" safari (in ram and not the one on my ssd)... mhm... any tricks how this could be an automatic workflow? Should I put the ssd-safari in a non-compressing zip so it is no longer visible to spotlight (so only ram-version is?)
– mfuesslin
Mar 3 '16 at 12:01
|
show 2 more comments
1 Answer
1
active
oldest
votes
From comments, here's the bones of how I do a RAMDisk setup & copy back.
It's not the complete structure, so won't compile as it stands [there will be many missing declarations, as I have a whole set of other structures before I get to this bit, that aren't generic enough to be worth copying in], but gives the routines for creation, copy out & copy back. Save it as an application & launch this instead of your app.
There's also no provision in it for telling your app to use it - that, for me, is a separate structure just using the app's prefs & some —settings
instructions at launch.
It's also set to cover if a mismatch occurs - that's because I have several versions of that particular app, & caches should not be mixed. You can probably leave that section out.
-- RAM Disk setup
set copying to 0
if not {exists disk RAMDisk} then
set VolumeName to RAMDisk
set SizeInMB to 1024
-- can choose size using this dialog
--display dialog "RAM Disk Size:" default answer SizeInMB buttons {"OK", "Cancel"}
set NumSectors to ((2 * 1024 * SizeInMB))
set DeviceName to do shell script "hdid -nomount ram://" & NumSectors
tell current application to do shell script "diskutil eraseVolume 'HFS+' '" & VolumeName & "' " & DeviceName
set foundDisk to false
repeat until (foundDisk = true)
if exists disk RAMDisk then
foundDisk = true
delay 1
-- do copy...
duplicate full_path to disk RAMDisk
exit repeat
else
delay 1 -- waiting for RAM disk to appear, if it's slow
end if
end repeat -- end disk wait
else -- if RAMDisk exists already
set p to (folders of disk RAMDisk)
if (exists folder cache_name of disk RAMDisk) then
if p is {} then -- disk's empty
duplicate full_path to disk RAMDisk
end if
else -- if not (exists folder cache_name of disk RAMDisk) then
display alert "RAM Disk contents are from a different version.nErasing first..." giving up after 4
try --deletes entire contents of RAMDisk, doesn't throw to Trash
--Folder in Trash can still cause "disk full" error.
--'quoted form' in shell scripts (unix) enables spaces in file names (ie RAMDisk name)
tell current application to do shell script "rm -rf Volumes/" & quoted form of RAMDisk & "/"
end try
duplicate full_path to disk RAMDisk
delay 2
end if -- end cache name check
end if -- end RAMDisk check
(*at this point, launch your app, the script will sit & wait for it to quit*)
-- after app quits, copy back & tidy up
display dialog "Quitting or just restarting 'app'?" buttons {"Quitting", "restarting"} ¬
default button "Quitting" giving up after 30
set thebutton to button returned of result as string
if thebutton is "Quitting" then
set toCopy to true -- to test for copyback
if folder backup_location exists then
display dialog "Safety folder already existsnDelete & continue copy-back or just quit?" buttons {"Delete", "Just Quit"} default button "Delete" giving up after 30
set thebutton to button returned of result as string
if thebutton is "Delete" then
delete folder backup_location
else
set toCopy to false -- will bypass copyback
end if
end if
if toCopy is true then
-- set a backup folder name before copying
set name of folder full_path to cache_name & " - old"
delay 1
duplicate contents of folder cache_name of disk RAMDisk to folder custom_caches_base_path
delay 1
delete folder backup_location
end if
end if -- end quit sequence
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "3"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f1048114%2framdisk-ssd-raid-1-boot-osx%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
From comments, here's the bones of how I do a RAMDisk setup & copy back.
It's not the complete structure, so won't compile as it stands [there will be many missing declarations, as I have a whole set of other structures before I get to this bit, that aren't generic enough to be worth copying in], but gives the routines for creation, copy out & copy back. Save it as an application & launch this instead of your app.
There's also no provision in it for telling your app to use it - that, for me, is a separate structure just using the app's prefs & some —settings
instructions at launch.
It's also set to cover if a mismatch occurs - that's because I have several versions of that particular app, & caches should not be mixed. You can probably leave that section out.
-- RAM Disk setup
set copying to 0
if not {exists disk RAMDisk} then
set VolumeName to RAMDisk
set SizeInMB to 1024
-- can choose size using this dialog
--display dialog "RAM Disk Size:" default answer SizeInMB buttons {"OK", "Cancel"}
set NumSectors to ((2 * 1024 * SizeInMB))
set DeviceName to do shell script "hdid -nomount ram://" & NumSectors
tell current application to do shell script "diskutil eraseVolume 'HFS+' '" & VolumeName & "' " & DeviceName
set foundDisk to false
repeat until (foundDisk = true)
if exists disk RAMDisk then
foundDisk = true
delay 1
-- do copy...
duplicate full_path to disk RAMDisk
exit repeat
else
delay 1 -- waiting for RAM disk to appear, if it's slow
end if
end repeat -- end disk wait
else -- if RAMDisk exists already
set p to (folders of disk RAMDisk)
if (exists folder cache_name of disk RAMDisk) then
if p is {} then -- disk's empty
duplicate full_path to disk RAMDisk
end if
else -- if not (exists folder cache_name of disk RAMDisk) then
display alert "RAM Disk contents are from a different version.nErasing first..." giving up after 4
try --deletes entire contents of RAMDisk, doesn't throw to Trash
--Folder in Trash can still cause "disk full" error.
--'quoted form' in shell scripts (unix) enables spaces in file names (ie RAMDisk name)
tell current application to do shell script "rm -rf Volumes/" & quoted form of RAMDisk & "/"
end try
duplicate full_path to disk RAMDisk
delay 2
end if -- end cache name check
end if -- end RAMDisk check
(*at this point, launch your app, the script will sit & wait for it to quit*)
-- after app quits, copy back & tidy up
display dialog "Quitting or just restarting 'app'?" buttons {"Quitting", "restarting"} ¬
default button "Quitting" giving up after 30
set thebutton to button returned of result as string
if thebutton is "Quitting" then
set toCopy to true -- to test for copyback
if folder backup_location exists then
display dialog "Safety folder already existsnDelete & continue copy-back or just quit?" buttons {"Delete", "Just Quit"} default button "Delete" giving up after 30
set thebutton to button returned of result as string
if thebutton is "Delete" then
delete folder backup_location
else
set toCopy to false -- will bypass copyback
end if
end if
if toCopy is true then
-- set a backup folder name before copying
set name of folder full_path to cache_name & " - old"
delay 1
duplicate contents of folder cache_name of disk RAMDisk to folder custom_caches_base_path
delay 1
delete folder backup_location
end if
end if -- end quit sequence
add a comment |
From comments, here's the bones of how I do a RAMDisk setup & copy back.
It's not the complete structure, so won't compile as it stands [there will be many missing declarations, as I have a whole set of other structures before I get to this bit, that aren't generic enough to be worth copying in], but gives the routines for creation, copy out & copy back. Save it as an application & launch this instead of your app.
There's also no provision in it for telling your app to use it - that, for me, is a separate structure just using the app's prefs & some —settings
instructions at launch.
It's also set to cover if a mismatch occurs - that's because I have several versions of that particular app, & caches should not be mixed. You can probably leave that section out.
-- RAM Disk setup
set copying to 0
if not {exists disk RAMDisk} then
set VolumeName to RAMDisk
set SizeInMB to 1024
-- can choose size using this dialog
--display dialog "RAM Disk Size:" default answer SizeInMB buttons {"OK", "Cancel"}
set NumSectors to ((2 * 1024 * SizeInMB))
set DeviceName to do shell script "hdid -nomount ram://" & NumSectors
tell current application to do shell script "diskutil eraseVolume 'HFS+' '" & VolumeName & "' " & DeviceName
set foundDisk to false
repeat until (foundDisk = true)
if exists disk RAMDisk then
foundDisk = true
delay 1
-- do copy...
duplicate full_path to disk RAMDisk
exit repeat
else
delay 1 -- waiting for RAM disk to appear, if it's slow
end if
end repeat -- end disk wait
else -- if RAMDisk exists already
set p to (folders of disk RAMDisk)
if (exists folder cache_name of disk RAMDisk) then
if p is {} then -- disk's empty
duplicate full_path to disk RAMDisk
end if
else -- if not (exists folder cache_name of disk RAMDisk) then
display alert "RAM Disk contents are from a different version.nErasing first..." giving up after 4
try --deletes entire contents of RAMDisk, doesn't throw to Trash
--Folder in Trash can still cause "disk full" error.
--'quoted form' in shell scripts (unix) enables spaces in file names (ie RAMDisk name)
tell current application to do shell script "rm -rf Volumes/" & quoted form of RAMDisk & "/"
end try
duplicate full_path to disk RAMDisk
delay 2
end if -- end cache name check
end if -- end RAMDisk check
(*at this point, launch your app, the script will sit & wait for it to quit*)
-- after app quits, copy back & tidy up
display dialog "Quitting or just restarting 'app'?" buttons {"Quitting", "restarting"} ¬
default button "Quitting" giving up after 30
set thebutton to button returned of result as string
if thebutton is "Quitting" then
set toCopy to true -- to test for copyback
if folder backup_location exists then
display dialog "Safety folder already existsnDelete & continue copy-back or just quit?" buttons {"Delete", "Just Quit"} default button "Delete" giving up after 30
set thebutton to button returned of result as string
if thebutton is "Delete" then
delete folder backup_location
else
set toCopy to false -- will bypass copyback
end if
end if
if toCopy is true then
-- set a backup folder name before copying
set name of folder full_path to cache_name & " - old"
delay 1
duplicate contents of folder cache_name of disk RAMDisk to folder custom_caches_base_path
delay 1
delete folder backup_location
end if
end if -- end quit sequence
add a comment |
From comments, here's the bones of how I do a RAMDisk setup & copy back.
It's not the complete structure, so won't compile as it stands [there will be many missing declarations, as I have a whole set of other structures before I get to this bit, that aren't generic enough to be worth copying in], but gives the routines for creation, copy out & copy back. Save it as an application & launch this instead of your app.
There's also no provision in it for telling your app to use it - that, for me, is a separate structure just using the app's prefs & some —settings
instructions at launch.
It's also set to cover if a mismatch occurs - that's because I have several versions of that particular app, & caches should not be mixed. You can probably leave that section out.
-- RAM Disk setup
set copying to 0
if not {exists disk RAMDisk} then
set VolumeName to RAMDisk
set SizeInMB to 1024
-- can choose size using this dialog
--display dialog "RAM Disk Size:" default answer SizeInMB buttons {"OK", "Cancel"}
set NumSectors to ((2 * 1024 * SizeInMB))
set DeviceName to do shell script "hdid -nomount ram://" & NumSectors
tell current application to do shell script "diskutil eraseVolume 'HFS+' '" & VolumeName & "' " & DeviceName
set foundDisk to false
repeat until (foundDisk = true)
if exists disk RAMDisk then
foundDisk = true
delay 1
-- do copy...
duplicate full_path to disk RAMDisk
exit repeat
else
delay 1 -- waiting for RAM disk to appear, if it's slow
end if
end repeat -- end disk wait
else -- if RAMDisk exists already
set p to (folders of disk RAMDisk)
if (exists folder cache_name of disk RAMDisk) then
if p is {} then -- disk's empty
duplicate full_path to disk RAMDisk
end if
else -- if not (exists folder cache_name of disk RAMDisk) then
display alert "RAM Disk contents are from a different version.nErasing first..." giving up after 4
try --deletes entire contents of RAMDisk, doesn't throw to Trash
--Folder in Trash can still cause "disk full" error.
--'quoted form' in shell scripts (unix) enables spaces in file names (ie RAMDisk name)
tell current application to do shell script "rm -rf Volumes/" & quoted form of RAMDisk & "/"
end try
duplicate full_path to disk RAMDisk
delay 2
end if -- end cache name check
end if -- end RAMDisk check
(*at this point, launch your app, the script will sit & wait for it to quit*)
-- after app quits, copy back & tidy up
display dialog "Quitting or just restarting 'app'?" buttons {"Quitting", "restarting"} ¬
default button "Quitting" giving up after 30
set thebutton to button returned of result as string
if thebutton is "Quitting" then
set toCopy to true -- to test for copyback
if folder backup_location exists then
display dialog "Safety folder already existsnDelete & continue copy-back or just quit?" buttons {"Delete", "Just Quit"} default button "Delete" giving up after 30
set thebutton to button returned of result as string
if thebutton is "Delete" then
delete folder backup_location
else
set toCopy to false -- will bypass copyback
end if
end if
if toCopy is true then
-- set a backup folder name before copying
set name of folder full_path to cache_name & " - old"
delay 1
duplicate contents of folder cache_name of disk RAMDisk to folder custom_caches_base_path
delay 1
delete folder backup_location
end if
end if -- end quit sequence
From comments, here's the bones of how I do a RAMDisk setup & copy back.
It's not the complete structure, so won't compile as it stands [there will be many missing declarations, as I have a whole set of other structures before I get to this bit, that aren't generic enough to be worth copying in], but gives the routines for creation, copy out & copy back. Save it as an application & launch this instead of your app.
There's also no provision in it for telling your app to use it - that, for me, is a separate structure just using the app's prefs & some —settings
instructions at launch.
It's also set to cover if a mismatch occurs - that's because I have several versions of that particular app, & caches should not be mixed. You can probably leave that section out.
-- RAM Disk setup
set copying to 0
if not {exists disk RAMDisk} then
set VolumeName to RAMDisk
set SizeInMB to 1024
-- can choose size using this dialog
--display dialog "RAM Disk Size:" default answer SizeInMB buttons {"OK", "Cancel"}
set NumSectors to ((2 * 1024 * SizeInMB))
set DeviceName to do shell script "hdid -nomount ram://" & NumSectors
tell current application to do shell script "diskutil eraseVolume 'HFS+' '" & VolumeName & "' " & DeviceName
set foundDisk to false
repeat until (foundDisk = true)
if exists disk RAMDisk then
foundDisk = true
delay 1
-- do copy...
duplicate full_path to disk RAMDisk
exit repeat
else
delay 1 -- waiting for RAM disk to appear, if it's slow
end if
end repeat -- end disk wait
else -- if RAMDisk exists already
set p to (folders of disk RAMDisk)
if (exists folder cache_name of disk RAMDisk) then
if p is {} then -- disk's empty
duplicate full_path to disk RAMDisk
end if
else -- if not (exists folder cache_name of disk RAMDisk) then
display alert "RAM Disk contents are from a different version.nErasing first..." giving up after 4
try --deletes entire contents of RAMDisk, doesn't throw to Trash
--Folder in Trash can still cause "disk full" error.
--'quoted form' in shell scripts (unix) enables spaces in file names (ie RAMDisk name)
tell current application to do shell script "rm -rf Volumes/" & quoted form of RAMDisk & "/"
end try
duplicate full_path to disk RAMDisk
delay 2
end if -- end cache name check
end if -- end RAMDisk check
(*at this point, launch your app, the script will sit & wait for it to quit*)
-- after app quits, copy back & tidy up
display dialog "Quitting or just restarting 'app'?" buttons {"Quitting", "restarting"} ¬
default button "Quitting" giving up after 30
set thebutton to button returned of result as string
if thebutton is "Quitting" then
set toCopy to true -- to test for copyback
if folder backup_location exists then
display dialog "Safety folder already existsnDelete & continue copy-back or just quit?" buttons {"Delete", "Just Quit"} default button "Delete" giving up after 30
set thebutton to button returned of result as string
if thebutton is "Delete" then
delete folder backup_location
else
set toCopy to false -- will bypass copyback
end if
end if
if toCopy is true then
-- set a backup folder name before copying
set name of folder full_path to cache_name & " - old"
delay 1
duplicate contents of folder cache_name of disk RAMDisk to folder custom_caches_base_path
delay 1
delete folder backup_location
end if
end if -- end quit sequence
answered Mar 3 '16 at 12:24
Tetsujin
15.4k53261
15.4k53261
add a comment |
add a comment |
Thanks for contributing an answer to Super User!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f1048114%2framdisk-ssd-raid-1-boot-osx%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Er.. how big do you plan to have the Ramdisk? Ramdisk is only as big as your RAM. Mac SSD smallest size is 128GB, unless you plan to have 128GB of RAM? I doubt what you want is even possible.. and if you think about it, RAID1 on RAMDISK and SSD, means the RAID set can only work as fast as the slowest component, which is the SSD. You won't get any performance gain, even assuming it is even possible.
– Darius
Mar 3 '16 at 11:38
Thought I can use a software raid (do not know if I am able to use only certain partitions in a hardware raid) to use only one partition with osx installed + some apps (ca. 30GB?). I have 64GB Ram and would use 30GB for RAMDisk (in a RAID 1 with SSD-Partition of equal size). Another possibility could be to buy a small 32GB SSD for that. Thought with "--write-mostly / --write-behind" it is possible to delay the data replication a bit (to buy the ssd some time to cope with the ramdisk).
– mfuesslin
Mar 3 '16 at 11:45
1
Technically this might be possible. If you have two 'drives' (one th ramdisk and one a partition on the SSD - no need to use all of the SSDs space). But it might be more useful to use the standard trick for persistent ramdisks. Akak boot, (automatically) copy data to ramdisk. And on shutdown have a copy back to permanent storage.
– Hennes
Mar 3 '16 at 11:49
@Hennes - that's how I deal with a rather thrashy cache for one application I use. Create RAMDisk & copy out at launch, launch app. At quit, write back to a duplicate cache folder, then after safely copied, swap folders & erase the older one.
– Tetsujin
Mar 3 '16 at 11:58
@Hennes - But then I am not able to speed up OSX environment... Ok its fast enough already but would be still nice to have things opened instantly. But maybe I am able to load a ramdisk after boot and then copy most used apps in there and create a symlink to their pendants in the ramdisk to get them fast started? But then spotlight needs to reindex to let me open the "right" safari (in ram and not the one on my ssd)... mhm... any tricks how this could be an automatic workflow? Should I put the ssd-safari in a non-compressing zip so it is no longer visible to spotlight (so only ram-version is?)
– mfuesslin
Mar 3 '16 at 12:01