* device balance times
@ 2014-10-21 18:59 Tomasz Chmielewski
2014-10-21 20:14 ` Piotr Pawłow
0 siblings, 1 reply; 35+ messages in thread
From: Tomasz Chmielewski @ 2014-10-21 18:59 UTC (permalink / raw)
To: linux-btrfs
FYI - after a failed disk and replacing it I've run a balance; it took
almost 3 weeks to complete, for 120 GBs of data:
# time btrfs balance start -v /home
Dumping filters: flags 0x7, state 0x0, force is off
DATA (flags 0x0): balancing
METADATA (flags 0x0): balancing
SYSTEM (flags 0x0): balancing
Done, had to relocate 124 out of 124 chunks
real 30131m52.873s
user 0m0.000s
sys 74m59.180s
Kernel is 3.17.0-rc7.
Filesystem is not that big, merely 124 GB used out of 1.8 TB:
/dev/sdb4 1.8T 124G 1.6T
8% /home
# btrfs fi df /home
Data, RAID1: total=121.00GiB, used=117.56GiB
System, RAID1: total=32.00MiB, used=48.00KiB
Metadata, RAID1: total=8.00GiB, used=4.99GiB
GlobalReserve, single: total=512.00MiB, used=0.00
# btrfs fi show /home
Label: none uuid: 84d087aa-3a32-46da-844f-a233237cf04f
Total devices 2 FS bytes used 122.56GiB
devid 2 size 1.71TiB used 129.03GiB path /dev/sdb4
devid 3 size 1.71TiB used 129.03GiB path /dev/sda4
The only special thing about this filesystem is that there are ~250
snapshots there:
# btrfs sub list /home|wc -l
253
It's using compression:
/dev/sdb4 on /home type btrfs (rw,noatime,compress=lzo,space_cache)
Other than taking occasional backups from remote, the server is idle.
# hdparm -t /dev/sda /dev/sdb
/dev/sda:
Timing buffered disk reads: 394 MB in 3.01 seconds = 131.03 MB/sec
/dev/sdb:
Timing buffered disk reads: 402 MB in 3.00 seconds = 133.86 MB/sec
How long does the balance take for others with "many" snapshots?
--
Tomasz Chmielewski
http://www.sslrack.com
^ permalink raw reply [flat|nested] 35+ messages in thread* Re: device balance times 2014-10-21 18:59 device balance times Tomasz Chmielewski @ 2014-10-21 20:14 ` Piotr Pawłow 2014-10-21 20:44 ` Arnaud Kapp 2014-10-22 1:43 ` Chris Murphy 0 siblings, 2 replies; 35+ messages in thread From: Piotr Pawłow @ 2014-10-21 20:14 UTC (permalink / raw) To: Tomasz Chmielewski, linux-btrfs On 21.10.2014 20:59, Tomasz Chmielewski wrote: > FYI - after a failed disk and replacing it I've run a balance; it took > almost 3 weeks to complete, for 120 GBs of data: Looks normal to me. Last time I started a balance after adding 6th device to my FS, it took 4 days to move 25GBs of data. Some chunks took 20 hours to move. I currently have 156 snapshots on this FS (nightly rsync backups). I think it is so slow, because it's disassembling chunks piece by piece and stuffing these pieces elsewhere, instead of moving chunks as a whole. If you have a lot of little pieces (as I do), it will take a while... ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: device balance times 2014-10-21 20:14 ` Piotr Pawłow @ 2014-10-21 20:44 ` Arnaud Kapp 2014-10-22 1:10 ` 5 _thousand_ snapshots? even 160? (was: device balance times) Robert White 2014-10-22 11:22 ` device balance times Austin S Hemmelgarn 2014-10-22 1:43 ` Chris Murphy 1 sibling, 2 replies; 35+ messages in thread From: Arnaud Kapp @ 2014-10-21 20:44 UTC (permalink / raw) To: linux-btrfs Hello, I would like to ask if the balance time is related to the number of snapshot or if this is related only to data (or both). I currently have about 4TB of data and around 5k snapshots. I'm thinking of going raid1 instead of single. From the numbers I see this seems totally impossible as it would take *way* too long. Would destroying snapshots (those are hourly snapshots to prevent stupid error to happens, like `rm my_important_file`) help? Should I reconsider moving to raid1 because of the time it would take? Sorry if I'm somehow hijacking this thread, but it seemed related :) Thanks, On 10/21/2014 10:14 PM, Piotr Pawłow wrote: > On 21.10.2014 20:59, Tomasz Chmielewski wrote: >> FYI - after a failed disk and replacing it I've run a balance; it took >> almost 3 weeks to complete, for 120 GBs of data: > > Looks normal to me. Last time I started a balance after adding 6th > device to my FS, it took 4 days to move 25GBs of data. Some chunks took > 20 hours to move. I currently have 156 snapshots on this FS (nightly > rsync backups). > > I think it is so slow, because it's disassembling chunks piece by piece > and stuffing these pieces elsewhere, instead of moving chunks as a > whole. If you have a lot of little pieces (as I do), it will take a > while... > > -- > To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 35+ messages in thread
* 5 _thousand_ snapshots? even 160? (was: device balance times) 2014-10-21 20:44 ` Arnaud Kapp @ 2014-10-22 1:10 ` Robert White 2014-10-22 4:02 ` Zygo Blaxell ` (3 more replies) 2014-10-22 11:22 ` device balance times Austin S Hemmelgarn 1 sibling, 4 replies; 35+ messages in thread From: Robert White @ 2014-10-22 1:10 UTC (permalink / raw) To: Arnaud Kapp, linux-btrfs That's an unmanageably large and probably pointless number of snapshots guys. I mean 150 is a heck of a lot, and 5000 is almost unfathomable in terms of possible usefulness. Snapshots are cheap but they aren't free. Each snapshot is effectively stapling down one version of your entire metadata tree, right? So imagine leaving tape spikes (little marks on the floor to keep track of where something is so you can put it back) for the last 150 or 5000 positions of the chair you are sitting in. At some point the clarity and purpose of those marks becomes the opposite of useful. Hourly for a day, daily for a week, weekly for a month, monthly for a year. And it's not a "backup" if you haven't moved it to another device. If you have 5k snapshots of a file that didn't change, you are still just one bad disk sector away from never having that data again because there's only one copy of the actual data stapled down in all of those snapshots. The ability to avoid fragmentation and cruft is diminished by excessive snapshots on a live media. Go get a backup drive or whatever. Snapshot you live media, send the snapshot to that backup. If you want to hoard them, hoard them on the backup drive. There is an old saying. If you haven't run the restore operation your backup scheme is untested. Have you _really_ considered how you would go about scavenging through 5k of snapshots? Have you really done the exercise-of-consideration about what you are safeguarding by having 156 or more paths to the same single disk sector? More than four snapshots on the live disk and you are playing with it (ha ha). Excessive snapshotting _will_ complicate many operations because you are permuting the choices the system has to consider and you are leaving allocated the ghosts of long dead files (like old logs in /var/log and umpteen copies of your browser cookies and history, and copies of the window layout from the last several hundred times you logged out of your desktop). I don't think balance will _ever_ move the contents of a read only snapshot. I could be wrong. I think you just end up with an endlessly fragmented storage space and balance has to take each chunk and search for someplace else it might better fit. Which explains why it took so long. And just _forget_ single-extent large files at that point. (Of course I could be wrong about the "never move" rule, but that would just make the checksums on the potentially hundreds or thousands of references need to be recalculated after a move, which would make incremental send/receive unfathomable.) On 10/21/2014 01:44 PM, Arnaud Kapp wrote: > Hello, > > I would like to ask if the balance time is related to the number of > snapshot or if this is related only to data (or both). > > I currently have about 4TB of data and around 5k snapshots. I'm thinking > of going raid1 instead of single. From the numbers I see this seems > totally impossible as it would take *way* too long. > > Would destroying snapshots (those are hourly snapshots to prevent stupid > error to happens, like `rm my_important_file`) help? > > Should I reconsider moving to raid1 because of the time it would take? > > Sorry if I'm somehow hijacking this thread, but it seemed related :) > > Thanks, > > On 10/21/2014 10:14 PM, Piotr Pawłow wrote: >> On 21.10.2014 20:59, Tomasz Chmielewski wrote: >>> FYI - after a failed disk and replacing it I've run a balance; it took >>> almost 3 weeks to complete, for 120 GBs of data: >> >> Looks normal to me. Last time I started a balance after adding 6th >> device to my FS, it took 4 days to move 25GBs of data. Some chunks took >> 20 hours to move. I currently have 156 snapshots on this FS (nightly >> rsync backups). >> >> I think it is so slow, because it's disassembling chunks piece by piece >> and stuffing these pieces elsewhere, instead of moving chunks as a >> whole. If you have a lot of little pieces (as I do), it will take a >> while... >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html > -- > To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: 5 _thousand_ snapshots? even 160? (was: device balance times) 2014-10-22 1:10 ` 5 _thousand_ snapshots? even 160? (was: device balance times) Robert White @ 2014-10-22 4:02 ` Zygo Blaxell 2014-10-22 4:05 ` Duncan ` (2 subsequent siblings) 3 siblings, 0 replies; 35+ messages in thread From: Zygo Blaxell @ 2014-10-22 4:02 UTC (permalink / raw) To: Robert White; +Cc: Arnaud Kapp, linux-btrfs [-- Attachment #1: Type: text/plain, Size: 1664 bytes --] On Tue, Oct 21, 2014 at 06:10:27PM -0700, Robert White wrote: > That's an unmanageably large and probably pointless number of > snapshots guys. > > I mean 150 is a heck of a lot, and 5000 is almost unfathomable in > terms of possible usefulness. > > Snapshots are cheap but they aren't free. This could be better documented. Most of the documentation about btrfs snapshots frankly just says how to make them and how awesome they are. In small-scale tests they seem cheap--a little more expensive than mkdir--but on larger scales they can become nightmares. Things I learned the hard way about ~200 snapshots on a half-TB filesystem: btrfs balance cancel/pause take a long time. Like 24+ hours. Not the entire balance operation--just one block group. Reboot and mount with skip_balance is a crude but effective way out. Making new snapshots is cheap. Deleting them is not. btrfs-cleaner will systematically disassemble each snapshot, sequentially, one extent (or some similarly tiny fragment) at a time, for more than a week. fsync() will take several seconds on that filesystem for the entire time btrfs-cleaner is running. There is no way to pause or stop the btrfs-cleaner kernel thread and as far as I can tell it's more or less immune to attempts to limit the amount of I/O bandwidth it demands with cgroup blkio.weight or ionice. Rebooting won't even stop it--it will just resume the next time the filesystem is mounted. mkfs and restore the filesystem from a backup of the original subvolume--it's an order of magnitude faster even with rsync. 2 or 3 are good numbers for snapshots. 0 or 1 are even better. [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: 5 _thousand_ snapshots? even 160? (was: device balance times) 2014-10-22 1:10 ` 5 _thousand_ snapshots? even 160? (was: device balance times) Robert White 2014-10-22 4:02 ` Zygo Blaxell @ 2014-10-22 4:05 ` Duncan 2014-10-23 20:38 ` 5 _thousand_ snapshots? even 160? Arnaud Kapp 2014-10-22 11:30 ` Austin S Hemmelgarn 2014-10-22 17:32 ` Goffredo Baroncelli 3 siblings, 1 reply; 35+ messages in thread From: Duncan @ 2014-10-22 4:05 UTC (permalink / raw) To: linux-btrfs Robert White posted on Tue, 21 Oct 2014 18:10:27 -0700 as excerpted: > Each snapshot is effectively stapling down one version of your entire > metadata tree, right? So imagine leaving tape spikes (little marks on > the floor to keep track of where something is so you can put it back) > for the last 150 or 5000 positions of the chair you are sitting in. At > some point the clarity and purpose of those marks becomes the opposite > of useful. > > Hourly for a day, daily for a week, weekly for a month, monthly for a > year. And it's not a "backup" if you haven't moved it to another device. > If you have 5k snapshots of a file that didn't change, you are still > just one bad disk sector away from never having that data again because > there's only one copy of the actual data stapled down in all of those > snapshots. Exactly. I explain the same thing in different words: (Note: "You" in this post is variously used to indicate the parent poster, and a "general you", including but not limited to the grandparent poster inquiring about his 5000 hourly snapshots. As I'm not trying to write a book or a term paper I actively suppose it should be clear to which "you" I'm referring in each case based on context...) Say you are taking hourly snapshots of a file, and you mistakenly delete it or need a copy from some time earlier. If you figure that out a day later, yes, the hour the snapshot was taken can make a big difference. If you don't figure it out until a month later, then is it going to be REALLY critical which HOUR you pick, or is simply picking one hour in the correct day (or possibly half-day) going to be as good, knowing that if you guess wrong you can always go back or forward another whole day? And if it's a year later, is even the particular day going to matter, or will going forward or backward a week or a month going to be good enough? And say it *IS* a year later, and the actual hour *DOES* matter. A year later, exactly how are you planning to remember the EXACT hour you need, such that simply randomly picking just one out of the day or week is going to make THAT big a difference? As you said but adjusted slightly to even out the weeks vs months, hourly for a day (or two), daily to complete the week (or two), weekly to complete the quarter (13 weeks), and if desired, quarterly for a year or two. But as you also rightly pointed out, just as if it's not tested it's not a backup, if it's not on an entirely separate device and filesystem, it's not a backup. And if you don't have real backups at least every quarter, why on earth are you worrying about a year's worth of hourly snapshots? If disaster strikes and the filesystem blows up, without a separate backup, they're all gone, so why the trouble to keep them around in the first place? And once you have that quarterly or whatever backup, then the advantage of continuing to lock down those 90-day-stale copies of all those files and metadata goes down dramatically, since if worse comes to worse, you simply retrieve it from backup, but meanwhile, all that stale locked down data and metadata is eating up room and dramatically complicating the job btrfs must do to manage it all! Yes, there are use-cases and there are use-cases. But if you aren't keeping at least quarterly backups, perhaps you better examine your backup plan and see if it really DOES match your use-case, ESPECIALLY if you're keeping thousands of snapshots around. And once you DO have those quarterly or whatever backups, then do you REALLY need to keep around even quarterly snapshots covering the SAME period? But let's say you do: 48 hourly snapshots, thinned after that to... 12 daily snapshots (2 weeks = 14, minus the two days of hourly), thinned after that to... 11 weekly snapshots (1 quarter = 13 weeks, minus the two weeks of daily), thinned after that to... 7 quarterly snapshots (2 years = 8 quarters, minus the quarter of weekly). 48 + 12 + 11 + 7 = ... 78 snapshots, appropriately spaced by age, covering two full years. I've even done the math for the extreme case of per-minute snapshots. With reasonable thinning along the lines of the above, even per-minute snapshots ends up well under 300 snapshots being reasonably managed at any single time. And keeping it under 300 snapshots really DOES help btrfs in terms of management task time-scaling. If you're doing hourly, as I said, 78, tho killing the quarterly snapshots entirely because they're backed up reduces that to 71, but let's just say, EASILY under 100. Tho that is of course per subvolume. If you have multiple subvolumes on the same filesystem, that can still end up being a thousand or two snapshots per filesystem. But those are all groups of something under 300 (under 100 with hourly) highly connected to each other, with the interweaving inside each of those groups being the real complexity in terms of btrfs management. But 5000 snapshots? Why? Are you *TRYING* to test btrfs until it breaks, or TRYING to demonstrate a balance taking an entire year? Do a real backup (or more than one, using those snapshots) if you need to, then thin the snapshots to something reasonable. As the above example shows, if it's a single subvolume being snapshotted, with hourly snapshots, 100 is /more/ than reasonable. With some hard questions, keeping in mind the cost in extra maintenance time for each additional snapshot, you might even find that minimum 6- hour snapshots (four per day) instead of 1-hour snapshots (24 per day) are fine. Or you might find that you only need to keep hourly snapshots for 12 hours instead of the 48 I assumed above, and daily snapshots for a week instead of the two I assumed above. Throwing in the nothing over a quarter because it's backed up assumption as well, that's... 8 4x-daily snapshots (2 days) 5 daily snapshots (a week, minus the two days above) 12 weekly snapshots (a quarter, minus the week above, then it's backed up to other storage) 8 + 5 + 12 = ... 25 snapshots total, 6-hours apart (four per day) at maximum frequency aka minimum spacing, reasonably spaced by age to no more than a week apart, with real backups taking over after a quarter. Btrfs should be able to work thru that in something actually approaching reasonable time, even if you /are/ dealing with 4 TB of data. =:^) Bonus hints: Btrfs quotas significantly complicate management as well. If you really need them, fine, but don't unnecessarily use them just because they are there. Look into defrag. If you don't have any half-gig plus VMs or databases or similar "internal rewrite pattern" files, consider the autodefrag mount option. Note that if you haven't been using it and your files are highly fragmented, it can slow things down at first, but a manual defrag, possibly a directory tree at a time to split things up into reasonable size and timeframes, can help. If you are running large VMs or databases or other half-gig-plus sized internal-rewrite-pattern files, the autodefrag mount option may not perform well for you. There's other options for that, including separate subvolumes, setting nocow on those files, and setting up a scheduled defrag. That's out of scope for this post, so do your research. It has certainly been discussed enough on-list. Meanwhile, do note that defrag is currently snapshot-aware-disabled, due to scaling issues. IOW, if your files are highly fragmented as they may well be if you haven't been regularly defragging them, expect the defrag to eat a lot of space since it'll break the sharing with older snapshots as anything that defrag moves will be unshared. However, if you've reduced snapshots to the quarter-max before off-filesystem backup as recommended above, a quarter from now all the undefragged snapshots will be expired and off the system and you'll have reclaimed that extra space. Meanwhile, your system should be /much/ easier to manage and will likely be snappier in its response as well. =:^) With all these points applied, balance performance should improve dramatically. However, with 4 TB of data the shear data size will remain a factor. Even in the best case typical thruput on spinning rust won't reach the ideal. 10 MiB/sec is a reasonable guide. 4 TiB/10 MiB/sec... 4*1024*1024 (MiB) / 10 MiB / sec = ... nearly 420 thousand seconds ... / 60 sec/min = ... 7000 minutes ... / 60 min/hour = ... nearly 120 hours or ... a bit under 5 days. So 4 TiB on spinning rust could reasonably take about 5 days to balance even under quite good conditions. That's due to the simple mechanics of head seek to read, head seek again to write, on spinning rust, and the shear size of 4 TB of data and metadata (tho with a bit of luck some of that will disappear as you thin out those thousands of snapshots, and it'll be more like 3 TB than 4, or possibly even down to 2 TiB, by the time you actually do it). IOW, it's not going to be instant, by any means. But the good part of it is that you don't have to do it all at once. You can use balance filters and balance start/pause/resume/cancel as necessary, to do only a portion of it at a time, and restart the balance using the convert,soft options so it doesn't redo already converted chunks when you have time to let it run. As long as it completes at least one chunk each run it'll make progress. -- Duncan - List replies preferred. No HTML msgs. "Every nonfree program has a lord, a master -- and if you use the program, he is your master." Richard Stallman ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: 5 _thousand_ snapshots? even 160? 2014-10-22 4:05 ` Duncan @ 2014-10-23 20:38 ` Arnaud Kapp 0 siblings, 0 replies; 35+ messages in thread From: Arnaud Kapp @ 2014-10-23 20:38 UTC (permalink / raw) To: linux-btrfs Hello, First, I'd like to thank you for this is interesting discussion and for pointing efficient snapshotting strategies. My 5k snapshots actually come from 4 subvolumes. I create 8 snapshots per hour because I actually create both a read-only and writable snapshots for each of my volume. Yeah this may sound dump, but this setup was my first use of btrfs --> oh some cool feature, lets abuse them ! The reason I did that is simple: w/o reading this mailing list, I would have continued to think that snapshots were really that cheap (a la git-branch). Turns out it's not the case (yet?). I will now rethink my snapshotting plan thanks to you. On 10/22/2014 06:05 AM, Duncan wrote: > Robert White posted on Tue, 21 Oct 2014 18:10:27 -0700 as excerpted: > >> Each snapshot is effectively stapling down one version of your entire >> metadata tree, right? So imagine leaving tape spikes (little marks on >> the floor to keep track of where something is so you can put it back) >> for the last 150 or 5000 positions of the chair you are sitting in. At >> some point the clarity and purpose of those marks becomes the opposite >> of useful. >> >> Hourly for a day, daily for a week, weekly for a month, monthly for a >> year. And it's not a "backup" if you haven't moved it to another device. >> If you have 5k snapshots of a file that didn't change, you are still >> just one bad disk sector away from never having that data again because >> there's only one copy of the actual data stapled down in all of those >> snapshots. > > Exactly. > > I explain the same thing in different words: > > (Note: "You" in this post is variously used to indicate the parent > poster, and a "general you", including but not limited to the grandparent > poster inquiring about his 5000 hourly snapshots. As I'm not trying to > write a book or a term paper I actively suppose it should be clear to > which "you" I'm referring in each case based on context...) > > Say you are taking hourly snapshots of a file, and you mistakenly delete > it or need a copy from some time earlier. > > If you figure that out a day later, yes, the hour the snapshot was taken > can make a big difference. > > If you don't figure it out until a month later, then is it going to be > REALLY critical which HOUR you pick, or is simply picking one hour in the > correct day (or possibly half-day) going to be as good, knowing that if > you guess wrong you can always go back or forward another whole day? > > And if it's a year later, is even the particular day going to matter, or > will going forward or backward a week or a month going to be good enough? > > And say it *IS* a year later, and the actual hour *DOES* matter. A year > later, exactly how are you planning to remember the EXACT hour you need, > such that simply randomly picking just one out of the day or week is > going to make THAT big a difference? > > As you said but adjusted slightly to even out the weeks vs months, hourly > for a day (or two), daily to complete the week (or two), weekly to > complete the quarter (13 weeks), and if desired, quarterly for a year or > two. > > But as you also rightly pointed out, just as if it's not tested it's not > a backup, if it's not on an entirely separate device and filesystem, it's > not a backup. > > And if you don't have real backups at least every quarter, why on earth > are you worrying about a year's worth of hourly snapshots? If disaster > strikes and the filesystem blows up, without a separate backup, they're > all gone, so why the trouble to keep them around in the first place? > > And once you have that quarterly or whatever backup, then the advantage > of continuing to lock down those 90-day-stale copies of all those files > and metadata goes down dramatically, since if worse comes to worse, you > simply retrieve it from backup, but meanwhile, all that stale locked down > data and metadata is eating up room and dramatically complicating the job > btrfs must do to manage it all! > > Yes, there are use-cases and there are use-cases. But if you aren't > keeping at least quarterly backups, perhaps you better examine your > backup plan and see if it really DOES match your use-case, ESPECIALLY if > you're keeping thousands of snapshots around. And once you DO have those > quarterly or whatever backups, then do you REALLY need to keep around > even quarterly snapshots covering the SAME period? > > But let's say you do: > > 48 hourly snapshots, thinned after that to... > > 12 daily snapshots (2 weeks = 14, minus the two days of hourly), thinned > after that to... > > 11 weekly snapshots (1 quarter = 13 weeks, minus the two weeks of daily), > thinned after that to... > > 7 quarterly snapshots (2 years = 8 quarters, minus the quarter of weekly). > > 48 + 12 + 11 + 7 = ... > > 78 snapshots, appropriately spaced by age, covering two full years. > > I've even done the math for the extreme case of per-minute snapshots. > With reasonable thinning along the lines of the above, even per-minute > snapshots ends up well under 300 snapshots being reasonably managed at > any single time. > > And keeping it under 300 snapshots really DOES help btrfs in terms of > management task time-scaling. > > If you're doing hourly, as I said, 78, tho killing the quarterly > snapshots entirely because they're backed up reduces that to 71, but > let's just say, EASILY under 100. > > Tho that is of course per subvolume. If you have multiple subvolumes on > the same filesystem, that can still end up being a thousand or two > snapshots per filesystem. But those are all groups of something under > 300 (under 100 with hourly) highly connected to each other, with the > interweaving inside each of those groups being the real complexity in > terms of btrfs management. > > But 5000 snapshots? > > Why? Are you *TRYING* to test btrfs until it breaks, or TRYING to > demonstrate a balance taking an entire year? > > Do a real backup (or more than one, using those snapshots) if you need > to, then thin the snapshots to something reasonable. As the above > example shows, if it's a single subvolume being snapshotted, with hourly > snapshots, 100 is /more/ than reasonable. > > With some hard questions, keeping in mind the cost in extra maintenance > time for each additional snapshot, you might even find that minimum 6- > hour snapshots (four per day) instead of 1-hour snapshots (24 per day) > are fine. Or you might find that you only need to keep hourly snapshots > for 12 hours instead of the 48 I assumed above, and daily snapshots for a > week instead of the two I assumed above. Throwing in the nothing over a > quarter because it's backed up assumption as well, that's... > > 8 4x-daily snapshots (2 days) > > 5 daily snapshots (a week, minus the two days above) > > 12 weekly snapshots (a quarter, minus the week above, then it's backed up > to other storage) > > 8 + 5 + 12 = ... > > 25 snapshots total, 6-hours apart (four per day) at maximum frequency aka > minimum spacing, reasonably spaced by age to no more than a week apart, > with real backups taking over after a quarter. > > Btrfs should be able to work thru that in something actually approaching > reasonable time, even if you /are/ dealing with 4 TB of data. =:^) > > Bonus hints: > > Btrfs quotas significantly complicate management as well. If you really > need them, fine, but don't unnecessarily use them just because they are > there. > > Look into defrag. > > If you don't have any half-gig plus VMs or databases or similar "internal > rewrite pattern" files, consider the autodefrag mount option. Note that > if you haven't been using it and your files are highly fragmented, it can > slow things down at first, but a manual defrag, possibly a directory tree > at a time to split things up into reasonable size and timeframes, can > help. > > If you are running large VMs or databases or other half-gig-plus sized > internal-rewrite-pattern files, the autodefrag mount option may not > perform well for you. There's other options for that, including separate > subvolumes, setting nocow on those files, and setting up a scheduled > defrag. That's out of scope for this post, so do your research. It has > certainly been discussed enough on-list. > > Meanwhile, do note that defrag is currently snapshot-aware-disabled, due > to scaling issues. IOW, if your files are highly fragmented as they may > well be if you haven't been regularly defragging them, expect the defrag > to eat a lot of space since it'll break the sharing with older snapshots > as anything that defrag moves will be unshared. However, if you've > reduced snapshots to the quarter-max before off-filesystem backup as > recommended above, a quarter from now all the undefragged snapshots will > be expired and off the system and you'll have reclaimed that extra space. > Meanwhile, your system should be /much/ easier to manage and will likely > be snappier in its response as well. =:^) > > With all these points applied, balance performance should improve > dramatically. However, with 4 TB of data the shear data size will remain > a factor. Even in the best case typical thruput on spinning rust won't > reach the ideal. 10 MiB/sec is a reasonable guide. 4 TiB/10 MiB/sec... > > 4*1024*1024 (MiB) / 10 MiB / sec = ... > > nearly 420 thousand seconds ... / 60 sec/min = ... > > 7000 minutes ... / 60 min/hour = ... > > nearly 120 hours or ... > > a bit under 5 days. > > > So 4 TiB on spinning rust could reasonably take about 5 days to balance > even under quite good conditions. That's due to the simple mechanics of > head seek to read, head seek again to write, on spinning rust, and the > shear size of 4 TB of data and metadata (tho with a bit of luck some of > that will disappear as you thin out those thousands of snapshots, and > it'll be more like 3 TB than 4, or possibly even down to 2 TiB, by the > time you actually do it). > > IOW, it's not going to be instant, by any means. > > But the good part of it is that you don't have to do it all at once. You > can use balance filters and balance start/pause/resume/cancel as > necessary, to do only a portion of it at a time, and restart the balance > using the convert,soft options so it doesn't redo already converted > chunks when you have time to let it run. As long as it completes at > least one chunk each run it'll make progress. > ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: 5 _thousand_ snapshots? even 160? 2014-10-22 1:10 ` 5 _thousand_ snapshots? even 160? (was: device balance times) Robert White 2014-10-22 4:02 ` Zygo Blaxell 2014-10-22 4:05 ` Duncan @ 2014-10-22 11:30 ` Austin S Hemmelgarn 2014-10-22 17:32 ` Goffredo Baroncelli 3 siblings, 0 replies; 35+ messages in thread From: Austin S Hemmelgarn @ 2014-10-22 11:30 UTC (permalink / raw) To: Robert White, Arnaud Kapp, linux-btrfs [-- Attachment #1: Type: text/plain, Size: 2645 bytes --] On 2014-10-21 21:10, Robert White wrote: > > I don't think balance will _ever_ move the contents of a read only > snapshot. I could be wrong. I think you just end up with an endlessly > fragmented storage space and balance has to take each chunk and search > for someplace else it might better fit. Which explains why it took so long. > > And just _forget_ single-extent large files at that point. > > (Of course I could be wrong about the "never move" rule, but that would > just make the checksums on the potentially hundreds or thousands of > references need to be recalculated after a move, which would make > incremental send/receive unfathomable.) > Balance doesn't do anything different for snapshots from what it does with regular data. I think you are confusing balance with defragmentation, as that does (in theory) handle snapshots differently. Balance just takes all of the blocks selected by the filters, and sends the through the block allocator again, and then updates the metadata to point to the new blocks. It can result in some fragmentation, but usually only for files bigger than about 256M, and even then doesn't always cause fragmentation > > On 10/21/2014 01:44 PM, Arnaud Kapp wrote: >> Hello, >> >> I would like to ask if the balance time is related to the number of >> snapshot or if this is related only to data (or both). >> >> I currently have about 4TB of data and around 5k snapshots. I'm thinking >> of going raid1 instead of single. From the numbers I see this seems >> totally impossible as it would take *way* too long. >> >> Would destroying snapshots (those are hourly snapshots to prevent stupid >> error to happens, like `rm my_important_file`) help? >> >> Should I reconsider moving to raid1 because of the time it would take? >> >> Sorry if I'm somehow hijacking this thread, but it seemed related :) >> >> Thanks, >> >> On 10/21/2014 10:14 PM, Piotr Pawłow wrote: >>> On 21.10.2014 20:59, Tomasz Chmielewski wrote: >>>> FYI - after a failed disk and replacing it I've run a balance; it took >>>> almost 3 weeks to complete, for 120 GBs of data: >>> >>> Looks normal to me. Last time I started a balance after adding 6th >>> device to my FS, it took 4 days to move 25GBs of data. Some chunks took >>> 20 hours to move. I currently have 156 snapshots on this FS (nightly >>> rsync backups). >>> >>> I think it is so slow, because it's disassembling chunks piece by piece >>> and stuffing these pieces elsewhere, instead of moving chunks as a >>> whole. If you have a lot of little pieces (as I do), it will take a >>> while... >>> [-- Attachment #2: S/MIME Cryptographic Signature --] [-- Type: application/pkcs7-signature, Size: 2455 bytes --] ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: 5 _thousand_ snapshots? even 160? 2014-10-22 1:10 ` 5 _thousand_ snapshots? even 160? (was: device balance times) Robert White ` (2 preceding siblings ...) 2014-10-22 11:30 ` Austin S Hemmelgarn @ 2014-10-22 17:32 ` Goffredo Baroncelli 3 siblings, 0 replies; 35+ messages in thread From: Goffredo Baroncelli @ 2014-10-22 17:32 UTC (permalink / raw) To: Robert White, Arnaud Kapp, linux-btrfs On 10/22/2014 03:10 AM, Robert White wrote: > Each snapshot is effectively stapling down one version of your > entire metadata tree, right ? On the best of my knowledge, I cannot confirm that. I understood (please, be free to correct me if I am wrong) that each snapshot create a copy of the changed leaf (of the (b)tree), and update (doing a copy) all the nodes up to the tree root. [...] > (Of course I could be wrong about the "never move" rule, but that > would just make the checksums on the potentially hundreds or > thousands of references need to be recalculated after a move, which > would make incremental send/receive unfathomable.) Between the physical data on the disk and the logical data see by the tree(s) there is an indirection layer: the tree chunks. Near all the trees refer to the data in terms of "logical" position. The logical position is translated to the physical one by the tree chunks. The balance is related to the movement of the chunk between the disks. But the data is unchanged. Anyway I fully agree with you when you say: > Snapshots are cheap but they aren't free. BR G.Baroncelli -- gpg @keyserver.linux.it: Goffredo Baroncelli <kreijackATinwind.it> Key fingerprint BBF5 1610 0B64 DAC6 5F7D 17B2 0EDA 9B37 8B82 E0B5 ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: device balance times 2014-10-21 20:44 ` Arnaud Kapp 2014-10-22 1:10 ` 5 _thousand_ snapshots? even 160? (was: device balance times) Robert White @ 2014-10-22 11:22 ` Austin S Hemmelgarn 1 sibling, 0 replies; 35+ messages in thread From: Austin S Hemmelgarn @ 2014-10-22 11:22 UTC (permalink / raw) To: Arnaud Kapp, linux-btrfs [-- Attachment #1: Type: text/plain, Size: 2510 bytes --] On 2014-10-21 16:44, Arnaud Kapp wrote: > Hello, > > I would like to ask if the balance time is related to the number of > snapshot or if this is related only to data (or both). > > I currently have about 4TB of data and around 5k snapshots. I'm thinking > of going raid1 instead of single. From the numbers I see this seems > totally impossible as it would take *way* too long. > > Would destroying snapshots (those are hourly snapshots to prevent stupid > error to happens, like `rm my_important_file`) help? > > Should I reconsider moving to raid1 because of the time it would take? > > Sorry if I'm somehow hijacking this thread, but it seemed related :) > > Thanks, > The issue is the snapshots, because I regularly fully re-balance my home directory on my desktop which is ~150GB on a BTRFS raid10 setup with only 3 or 4 snapshots (I only do daily snapshots, cause anything I need finer granularity on I have under git), and that takes only about 2 or 3 hours depending on how many empty chunks I have. I would remove the snapshots, and also start keeping fewer of them (5k hourly snapshots is more than six months worth of file versions), and then run the balance. I would also suggest converting data by itself first, and then converting metadata, as converting data chunks will require re-writing large parts of the metadata. > On 10/21/2014 10:14 PM, Piotr Pawłow wrote: >> On 21.10.2014 20:59, Tomasz Chmielewski wrote: >>> FYI - after a failed disk and replacing it I've run a balance; it took >>> almost 3 weeks to complete, for 120 GBs of data: >> >> Looks normal to me. Last time I started a balance after adding 6th >> device to my FS, it took 4 days to move 25GBs of data. Some chunks took >> 20 hours to move. I currently have 156 snapshots on this FS (nightly >> rsync backups). >> >> I think it is so slow, because it's disassembling chunks piece by piece >> and stuffing these pieces elsewhere, instead of moving chunks as a >> whole. If you have a lot of little pieces (as I do), it will take a >> while... >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html > -- > To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html [-- Attachment #2: S/MIME Cryptographic Signature --] [-- Type: application/pkcs7-signature, Size: 2455 bytes --] ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: device balance times 2014-10-21 20:14 ` Piotr Pawłow 2014-10-21 20:44 ` Arnaud Kapp @ 2014-10-22 1:43 ` Chris Murphy 2014-10-22 12:40 ` Piotr Pawłow 2014-10-22 16:15 ` Chris Murphy 1 sibling, 2 replies; 35+ messages in thread From: Chris Murphy @ 2014-10-22 1:43 UTC (permalink / raw) To: linux-btrfs On Oct 21, 2014, at 4:14 PM, Piotr Pawłow <pp@siedziba.pl> wrote: > On 21.10.2014 20:59, Tomasz Chmielewski wrote: >> FYI - after a failed disk and replacing it I've run a balance; it took almost 3 weeks to complete, for 120 GBs of data: > > Looks normal to me. Last time I started a balance after adding 6th device to my FS, it took 4 days to move 25GBs of data. It's long term untenable. At some point it must be fixed. It's way, way slower than md raid. > I think it is so slow, because it's disassembling chunks piece by piece and stuffing these pieces elsewhere, instead of moving chunks as a whole. If you have a lot of little pieces (as I do), it will take a while… At a certain point it needs to fallback to block level copying, with a ~ 32KB block. It can't be treating things as if they're 1K files, doing file level copying that takes forever. It's just too risky that another device fails in the meantime. Chris Murphy ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: device balance times 2014-10-22 1:43 ` Chris Murphy @ 2014-10-22 12:40 ` Piotr Pawłow 2014-10-22 16:59 ` Bob Marley 2014-10-23 9:19 ` Miao Xie 2014-10-22 16:15 ` Chris Murphy 1 sibling, 2 replies; 35+ messages in thread From: Piotr Pawłow @ 2014-10-22 12:40 UTC (permalink / raw) To: Chris Murphy, linux-btrfs On 22.10.2014 03:43, Chris Murphy wrote: > On Oct 21, 2014, at 4:14 PM, Piotr Pawłow<pp@siedziba.pl> wrote: >> Looks normal to me. Last time I started a balance after adding 6th device to my FS, it took 4 days to move 25GBs of data. > It's long term untenable. At some point it must be fixed. It's way, way slower than md raid. > At a certain point it needs to fallback to block level copying, with a ~ 32KB block. It can't be treating things as if they're 1K files, doing file level copying that takes forever. It's just too risky that another device fails in the meantime. There's "device replace" for restoring redundancy, which is fast, but not implemented yet for RAID5/6. I think the problem is that balance was originally used for balancing data / metadata split - moving stuff out of mostly empty chunks to free them and use for something else. It pretty much has to be done on the extent level. Then balance was repurposed for things like converting RAID profiles and restoring redundancy and balancing device usage in multi-device configurations. It works, but the approach to do it extent by extent is slow. I wonder if we could do some of these operations by just copying whole chunks in bulk. Wasn't that the point of introducing logical addresses? - to be able to move chunks around quickly without changing anything except updating chunk pointers? BTW: I'd love a simple interface to be able to select a chunk and tell it to move somewhere else. I'd like to tell chunks with metadata, or with tons of extents: Hey, chunks! Why don't you move to my SSDs? :) ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: device balance times 2014-10-22 12:40 ` Piotr Pawłow @ 2014-10-22 16:59 ` Bob Marley 2014-10-23 7:39 ` Russell Coker 2014-10-23 9:19 ` Miao Xie 1 sibling, 1 reply; 35+ messages in thread From: Bob Marley @ 2014-10-22 16:59 UTC (permalink / raw) To: linux-btrfs On 22/10/2014 14:40, Piotr Pawłow wrote: > On 22.10.2014 03:43, Chris Murphy wrote: >> On Oct 21, 2014, at 4:14 PM, Piotr Pawłow<pp@siedziba.pl> wrote: >>> Looks normal to me. Last time I started a balance after adding 6th >>> device to my FS, it took 4 days to move 25GBs of data. >> It's long term untenable. At some point it must be fixed. It's way, >> way slower than md raid. >> At a certain point it needs to fallback to block level copying, with >> a ~ 32KB block. It can't be treating things as if they're 1K files, >> doing file level copying that takes forever. It's just too risky that >> another device fails in the meantime. > > There's "device replace" for restoring redundancy, which is fast, but > not implemented yet for RAID5/6. "Device replace" on raid 0,1,10 works if the device to be replaced is still alive, otherwise the operation is as long as a rebalance and works similarly (AFAIR). Which is way too long in terms of the likelihood of another disk failing. Additionally, it seeks like crazy during the operation, which also greatly increases the likelihood of another disk failing. Until this is fixed I am not confident in using btrfs on a production system which requires RAID redundancy. The operation needs to be streamlined: it should be as sequential as possible (sort files according to their LBA before reading/writing), with the fewest number of seeks on every disk, and with large buffers, so that reads from the source disk(s) and writes to the replacement disk goes at platter-speed or near there. ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: device balance times 2014-10-22 16:59 ` Bob Marley @ 2014-10-23 7:39 ` Russell Coker 2014-10-23 8:49 ` Duncan 0 siblings, 1 reply; 35+ messages in thread From: Russell Coker @ 2014-10-23 7:39 UTC (permalink / raw) To: Bob Marley, linux-btrfs Also a device replace operation requires that the replacement be the same size (or maybe larger). While a remove and replace allows the replacement to be merely large enough to contain all the data. Given the size variation in what might be called the same size disk by manufcturers this isn't uncommon - unless you just get a replacement of the next size up (which is a good option too). On October 23, 2014 3:59:31 AM GMT+11:00, Bob Marley <bobmarley@shiftmail.org> wrote: >On 22/10/2014 14:40, Piotr Pawłow wrote: >> On 22.10.2014 03:43, Chris Murphy wrote: >>> On Oct 21, 2014, at 4:14 PM, Piotr Pawłow<pp@siedziba.pl> wrote: >>>> Looks normal to me. Last time I started a balance after adding 6th >>>> device to my FS, it took 4 days to move 25GBs of data. >>> It's long term untenable. At some point it must be fixed. It's way, >>> way slower than md raid. >>> At a certain point it needs to fallback to block level copying, with > >>> a ~ 32KB block. It can't be treating things as if they're 1K files, >>> doing file level copying that takes forever. It's just too risky >that >>> another device fails in the meantime. >> >> There's "device replace" for restoring redundancy, which is fast, but > >> not implemented yet for RAID5/6. > >"Device replace" on raid 0,1,10 works if the device to be replaced is >still alive, otherwise the operation is as long as a rebalance and >works >similarly (AFAIR). >Which is way too long in terms of the likelihood of another disk >failing. >Additionally, it seeks like crazy during the operation, which also >greatly increases the likelihood of another disk failing. > >Until this is fixed I am not confident in using btrfs on a production >system which requires RAID redundancy. > >The operation needs to be streamlined: it should be as sequential as >possible (sort files according to their LBA before reading/writing), >with the fewest number of seeks on every disk, and with large buffers, >so that reads from the source disk(s) and writes to the replacement >disk >goes at platter-speed or near there. > > >-- >To unsubscribe from this list: send the line "unsubscribe linux-btrfs" >in >the body of a message to majordomo@vger.kernel.org >More majordomo info at http://vger.kernel.org/majordomo-info.html -- Sent from my Samsung Galaxy Note 3 with K-9 Mail. ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: device balance times 2014-10-23 7:39 ` Russell Coker @ 2014-10-23 8:49 ` Duncan 0 siblings, 0 replies; 35+ messages in thread From: Duncan @ 2014-10-23 8:49 UTC (permalink / raw) To: linux-btrfs Russell Coker posted on Thu, 23 Oct 2014 18:39:52 +1100 as excerpted: > Also a device replace operation requires that the replacement be the > same size (or maybe larger). While a remove and replace allows the > replacement to be merely large enough to contain all the data. Given the > size variation in what might be called the same size disk by > manufcturers this isn't uncommon - unless you just get a replacement of > the next size up (which is a good option too). Good argument for using user-configured partitions, even if you just use one covering most of the physical device, instead of manufacturer's rather arbitrarily convenience-chosen raw physical device sizes. In such a scenario if you deliberately undersize that single partition by a few gigs, you can be reasonably sure that any physical device of the same claimed size as the original physical device can handle it. Plus that reserves room for GPT and dedicated EFI and/or reserved-BIOS partitions too, since the BIOS partition might be a couple MiB and the EFI partition a couple hundred MiB, well under a gig combined. =:^) -- Duncan - List replies preferred. No HTML msgs. "Every nonfree program has a lord, a master -- and if you use the program, he is your master." Richard Stallman ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: device balance times 2014-10-22 12:40 ` Piotr Pawłow 2014-10-22 16:59 ` Bob Marley @ 2014-10-23 9:19 ` Miao Xie 2014-10-23 11:39 ` Austin S Hemmelgarn 1 sibling, 1 reply; 35+ messages in thread From: Miao Xie @ 2014-10-23 9:19 UTC (permalink / raw) To: Piotr Pawłow, Chris Murphy, linux-btrfs On Wed, 22 Oct 2014 14:40:47 +0200, Piotr Pawłow wrote: > On 22.10.2014 03:43, Chris Murphy wrote: >> On Oct 21, 2014, at 4:14 PM, Piotr Pawłow<pp@siedziba.pl> wrote: >>> Looks normal to me. Last time I started a balance after adding 6th device to my FS, it took 4 days to move 25GBs of data. >> It's long term untenable. At some point it must be fixed. It's way, way slower than md raid. >> At a certain point it needs to fallback to block level copying, with a ~ 32KB block. It can't be treating things as if they're 1K files, doing file level copying that takes forever. It's just too risky that another device fails in the meantime. > > There's "device replace" for restoring redundancy, which is fast, but not implemented yet for RAID5/6. Now my colleague and I is implementing the scrub/replace for RAID5/6 and I have a plan to reimplement the balance and split it off from the metadata/file data process. the main idea is - allocate a new chunk which has the same size as the relocated one, but don't insert it into the block group list, so we don't allocate the free space from it. - set the source chunk to be Read-only - copy the data from the source chunk to the new chunk - replace the extent map of the source chunk with the one of the new chunk(The new chunk has the same logical address and the length as the old one) - release the source chunk By this way, we needn't deal the data one extent by one extent, and needn't do any space reservation, so the speed will be very fast even we have lots of snapshots. Thanks Miao > > I think the problem is that balance was originally used for balancing data / metadata split - moving stuff out of mostly empty chunks to free them and use for something else. It pretty much has to be done on the extent level. > > Then balance was repurposed for things like converting RAID profiles and restoring redundancy and balancing device usage in multi-device configurations. It works, but the approach to do it extent by extent is slow. > > I wonder if we could do some of these operations by just copying whole chunks in bulk. Wasn't that the point of introducing logical addresses? - to be able to move chunks around quickly without changing anything except updating chunk pointers? > > BTW: I'd love a simple interface to be able to select a chunk and tell it to move somewhere else. I'd like to tell chunks with metadata, or with tons of extents: Hey, chunks! Why don't you move to my SSDs? :) > -- > To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: device balance times 2014-10-23 9:19 ` Miao Xie @ 2014-10-23 11:39 ` Austin S Hemmelgarn 2014-10-24 1:05 ` Duncan 0 siblings, 1 reply; 35+ messages in thread From: Austin S Hemmelgarn @ 2014-10-23 11:39 UTC (permalink / raw) To: miaox, Piotr Pawłow, Chris Murphy, linux-btrfs [-- Attachment #1: Type: text/plain, Size: 1905 bytes --] On 2014-10-23 05:19, Miao Xie wrote: > On Wed, 22 Oct 2014 14:40:47 +0200, Piotr Pawłow wrote: >> On 22.10.2014 03:43, Chris Murphy wrote: >>> On Oct 21, 2014, at 4:14 PM, Piotr Pawłow<pp@siedziba.pl> wrote: >>>> Looks normal to me. Last time I started a balance after adding 6th device to my FS, it took 4 days to move 25GBs of data. >>> It's long term untenable. At some point it must be fixed. It's way, way slower than md raid. >>> At a certain point it needs to fallback to block level copying, with a ~ 32KB block. It can't be treating things as if they're 1K files, doing file level copying that takes forever. It's just too risky that another device fails in the meantime. >> >> There's "device replace" for restoring redundancy, which is fast, but not implemented yet for RAID5/6. > > Now my colleague and I is implementing the scrub/replace for RAID5/6 > and I have a plan to reimplement the balance and split it off from the metadata/file data process. the main idea is > - allocate a new chunk which has the same size as the relocated one, but don't insert it into the block group list, so we don't > allocate the free space from it. > - set the source chunk to be Read-only > - copy the data from the source chunk to the new chunk > - replace the extent map of the source chunk with the one of the new chunk(The new chunk has > the same logical address and the length as the old one) > - release the source chunk > > By this way, we needn't deal the data one extent by one extent, and needn't do any space reservation, > so the speed will be very fast even we have lots of snapshots. > Even if balance gets re-implemented this way, we should still provide some way to consolidate the data from multiple partially full chunks. Maybe keep the old balance path and have some option (maybe call it aggressive?) that turns it on instead of the new code. [-- Attachment #2: S/MIME Cryptographic Signature --] [-- Type: application/pkcs7-signature, Size: 2455 bytes --] ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: device balance times 2014-10-23 11:39 ` Austin S Hemmelgarn @ 2014-10-24 1:05 ` Duncan 2014-10-24 2:35 ` Zygo Blaxell 0 siblings, 1 reply; 35+ messages in thread From: Duncan @ 2014-10-24 1:05 UTC (permalink / raw) To: linux-btrfs Austin S Hemmelgarn posted on Thu, 23 Oct 2014 07:39:28 -0400 as excerpted: > On 2014-10-23 05:19, Miao Xie wrote: >> >> Now my colleague and I is implementing the scrub/replace for RAID5/6 >> and I have a plan to reimplement the balance and split it off from the >> metadata/file data process. the main idea is >> - allocate a new chunk which has the same size as the relocated one, >> but don't insert it into the block group list, so we don't allocate >> the free space from it. >> - set the source chunk to be Read-only >> - copy the data from the source chunk to the new chunk >> - replace the extent map of the source chunk with the one of the new >> chunk(The new chunk has the same logical address and the length as >> the old one) >> - release the source chunk >> >> By this way, we needn't deal the data one extent by one extent, and >> needn't do any space reservation, so the speed will be very fast even >> [if] we have lots of snapshots. >> > Even if balance gets re-implemented this way, we should still provide > some way to consolidate the data from multiple partially full chunks. > Maybe keep the old balance path and have some option (maybe call it > aggressive?) that turns it on instead of the new code. IMO: * Keep normal default balance behavior as-is. * Add two new options, --fast, and --aggressive. * --aggressive behaves as today and is the normal default. * --fast is the new chunk-by-chunk behavior. This becomes the default if the convert filter is used, or if balance detects that it /is/ changing the mode, thus converting or filling in missing chunk copies, even when the convert filter was not specifically set. Thus, if there's only one chunk copy (single or raid0 mode, or raid1/10 or dup with a missing/ invalid copy) and the balance would result in two copies, default to --fast. Similarly, if it's raid1/10 and switching to single/raid0, default to --fast. If no conversion is being done, keep the normal --aggressive default. * Users could always specify the behavior they want, overriding the default, using the appropriate option. * Of course defaults may result in some chunks being rebalanced in fast mode, while others are rebalanced in aggressive mode, if for instance it's 3+ device raid1 mode filesystem with one device missing, since in that case there'd be the usual two copies of some chunks and those would default to aggressive, while there'd be one copy of chunks where the other one was on the missing device. However, users could always specify the desired behavior using the last point above, thus getting the same behavior for the entire balance. -- Duncan - List replies preferred. No HTML msgs. "Every nonfree program has a lord, a master -- and if you use the program, he is your master." Richard Stallman ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: device balance times 2014-10-24 1:05 ` Duncan @ 2014-10-24 2:35 ` Zygo Blaxell 2014-10-24 5:13 ` Duncan 2014-10-24 10:58 ` Rich Freeman 0 siblings, 2 replies; 35+ messages in thread From: Zygo Blaxell @ 2014-10-24 2:35 UTC (permalink / raw) To: Duncan; +Cc: linux-btrfs [-- Attachment #1: Type: text/plain, Size: 4493 bytes --] On Fri, Oct 24, 2014 at 01:05:39AM +0000, Duncan wrote: > Austin S Hemmelgarn posted on Thu, 23 Oct 2014 07:39:28 -0400 as > excerpted: > > > On 2014-10-23 05:19, Miao Xie wrote: > >> > >> Now my colleague and I is implementing the scrub/replace for RAID5/6 > >> and I have a plan to reimplement the balance and split it off from the > >> metadata/file data process. the main idea is > >> - allocate a new chunk which has the same size as the relocated one, > >> but don't insert it into the block group list, so we don't allocate > >> the free space from it. > >> - set the source chunk to be Read-only > >> - copy the data from the source chunk to the new chunk > >> - replace the extent map of the source chunk with the one of the new > >> chunk(The new chunk has the same logical address and the length as > >> the old one) > >> - release the source chunk > >> > >> By this way, we needn't deal the data one extent by one extent, and > >> needn't do any space reservation, so the speed will be very fast even > >> [if] we have lots of snapshots. > >> > > Even if balance gets re-implemented this way, we should still provide > > some way to consolidate the data from multiple partially full chunks. > > Maybe keep the old balance path and have some option (maybe call it > > aggressive?) that turns it on instead of the new code. > > IMO: > > * Keep normal default balance behavior as-is. > > * Add two new options, --fast, and --aggressive. > > * --aggressive behaves as today and is the normal default. > > * --fast is the new chunk-by-chunk behavior. This becomes the default if > the convert filter is used, or if balance detects that it /is/ changing > the mode, thus converting or filling in missing chunk copies, even when > the convert filter was not specifically set. Thus, if there's only one > chunk copy (single or raid0 mode, or raid1/10 or dup with a missing/ > invalid copy) and the balance would result in two copies, default to > --fast. Similarly, if it's raid1/10 and switching to single/raid0, > default to --fast. If no conversion is being done, keep the normal > --aggressive default. My pet peeve: if balance is converting profiles from RAID1 to single, the conversion should be *instantaneous* (or at least small_constant * number_of_block_groups). Pick one mirror, keep all the chunks on that mirror, delete all the corresponding chunks on the other mirror. Sometimes when a RAID1 mirror dies we want to temporarily convert the remaining disk to single data / DUP metadata while we wait for a replacement. Right now if we try to do this, we discover: - if the system reboots during the rebalance, btrfs now sees a mix of single and RAID1 data profiles on the disk. The rebalance takes a long time, and a hardware replacement has been ordered, so the probability of this happening is pretty close to 1.0. - one disk is missing, so there's a check in the mount code path that counts missing disks like this: - RAID1 profile: we can tolerate 1 missing disk so just mount rw,degraded - single profile: we can tolerate zero missing disks, so we don't allow rw mounts even if degraded. That filesystem is now permanently read-only (or at least it was in 3.14). It's not even possible to add or replace disks any more since that requires mounting the filesystem read-write. > * Users could always specify the behavior they want, overriding the > default, using the appropriate option. > > * Of course defaults may result in some chunks being rebalanced in fast > mode, while others are rebalanced in aggressive mode, if for instance > it's 3+ device raid1 mode filesystem with one device missing, since in > that case there'd be the usual two copies of some chunks and those would > default to aggressive, while there'd be one copy of chunks where the > other one was on the missing device. However, users could always specify > the desired behavior using the last point above, thus getting the same > behavior for the entire balance. > > -- > Duncan - List replies preferred. No HTML msgs. > "Every nonfree program has a lord, a master -- > and if you use the program, he is your master." Richard Stallman > > -- > To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: device balance times 2014-10-24 2:35 ` Zygo Blaxell @ 2014-10-24 5:13 ` Duncan 2014-10-24 15:18 ` Zygo Blaxell 2014-10-24 10:58 ` Rich Freeman 1 sibling, 1 reply; 35+ messages in thread From: Duncan @ 2014-10-24 5:13 UTC (permalink / raw) To: linux-btrfs Zygo Blaxell posted on Thu, 23 Oct 2014 22:35:29 -0400 as excerpted: > My pet peeve: if balance is converting profiles from RAID1 to single, > the conversion should be *instantaneous* (or at least small_constant * > number_of_block_groups). Pick one mirror, keep all the chunks on that > mirror, delete all the corresponding chunks on the other mirror. That would argue for either a third balance mode, --convert-only, or a different tool, avoiding a rewrite of existing chunks entirely, simply replicating them if adding redundancy or deleting a copy if reducing it, as necessary. -- Duncan - List replies preferred. No HTML msgs. "Every nonfree program has a lord, a master -- and if you use the program, he is your master." Richard Stallman ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: device balance times 2014-10-24 5:13 ` Duncan @ 2014-10-24 15:18 ` Zygo Blaxell 0 siblings, 0 replies; 35+ messages in thread From: Zygo Blaxell @ 2014-10-24 15:18 UTC (permalink / raw) To: Duncan; +Cc: linux-btrfs [-- Attachment #1: Type: text/plain, Size: 1640 bytes --] On Fri, Oct 24, 2014 at 05:13:27AM +0000, Duncan wrote: > Zygo Blaxell posted on Thu, 23 Oct 2014 22:35:29 -0400 as excerpted: > > > My pet peeve: if balance is converting profiles from RAID1 to single, > > the conversion should be *instantaneous* (or at least small_constant * > > number_of_block_groups). Pick one mirror, keep all the chunks on that > > mirror, delete all the corresponding chunks on the other mirror. > > That would argue for either a third balance mode, --convert-only, or a > different tool, avoiding a rewrite of existing chunks entirely, simply > replicating them if adding redundancy or deleting a copy if reducing it, > as necessary. Isn't that what soft does? [reading noises] OK, maybe not. 'soft' leaves a chunk alone if it already fits all the target profile requirements; however, in this case the profile (and only the profile, no data) is changing. I think just two modes are sufficient: one that does everything the most thorough way (throw scrub and defrag in there too, so we can do a single pass over the filesystem that does all the maintenance tasks at once), and one that takes advantage of every special-case shortcut available to achieve specific goals in the shortest time. I also think it's a little odd that conversion and balance are the same tool. Traditional RAID conversions don't care about filesystem layout, because they work on a completely separate layer (i.e. at the block level). It's certainly possible to perform a RAID conversion by reallocating all the filesystem-level objects, but just because you can doesn't mean you should. ;) [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: device balance times 2014-10-24 2:35 ` Zygo Blaxell 2014-10-24 5:13 ` Duncan @ 2014-10-24 10:58 ` Rich Freeman 2014-10-24 16:07 ` Zygo Blaxell 1 sibling, 1 reply; 35+ messages in thread From: Rich Freeman @ 2014-10-24 10:58 UTC (permalink / raw) To: Zygo Blaxell; +Cc: Duncan, Btrfs BTRFS On Thu, Oct 23, 2014 at 10:35 PM, Zygo Blaxell <ce3g8jdj@umail.furryterror.org> wrote: > > - single profile: we can tolerate zero missing disks, > so we don't allow rw mounts even if degraded. > That seems like the wrong logic here. By all means mount read-only by default for safety, but there should be a way to force a read-write mount on any filesystem, precisely because the RAID modes can be mixed and even if you lose two devices on a RAID1 system not ALL the data is lost if you have more than two drives. By all means return an error when reading a file that is completely missing. By all means have an extra fsck mode that goes ahead and deletes all the missing files (assuming it has metadata) or perhaps moves them all to a new "lost+notfound" subvolume or something. Indeed, if the lost device just happens to not actually contain any data you might be lucky and not lose any data at all when losing a single device in a filesystem that entirely uses the single profile. That would be a bit of an edge case though, but one that is automatically handled if you give the admin the ability to force read-write/etc. -- Rich ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: device balance times 2014-10-24 10:58 ` Rich Freeman @ 2014-10-24 16:07 ` Zygo Blaxell 2014-10-24 19:58 ` Rich Freeman 0 siblings, 1 reply; 35+ messages in thread From: Zygo Blaxell @ 2014-10-24 16:07 UTC (permalink / raw) To: Rich Freeman; +Cc: Duncan, Btrfs BTRFS [-- Attachment #1: Type: text/plain, Size: 3092 bytes --] On Fri, Oct 24, 2014 at 06:58:25AM -0400, Rich Freeman wrote: > On Thu, Oct 23, 2014 at 10:35 PM, Zygo Blaxell > <ce3g8jdj@umail.furryterror.org> wrote: > > > > - single profile: we can tolerate zero missing disks, > > so we don't allow rw mounts even if degraded. > > That seems like the wrong logic here. By all means mount read-only by > default for safety, but there should be a way to force a read-write > mount on any filesystem, precisely because the RAID modes can be mixed > and even if you lose two devices on a RAID1 system not ALL the data is > lost if you have more than two drives. I agree, but https://bugzilla.kernel.org/show_bug.cgi?id=60594 does not: Stefan Behrens 2013-08-23 13:42:16 UTC The way out is to mount read-only, copy the data aside and be happy that no data was lost. The #1 goal (IMO) is to avoid data loss. Therefore the filesystem goes read-only if less devices are functional for writing than required by the selected RAID levels. And in order to avoid the surprise of a filesystem going read-only 30 seconds after mounting it, this is also enforced at mount time. [...] We could also leave this as an option to the user "mount -o degraded-and-I-want-to-lose-my-data", but in my opinion the use case is very, very exceptional. IMHO the use case is common any time restoring the entire filesystem from backups is inconvenient. That covers a *lot* of users. I never have a machine with more than 50% of its raw disk space devoted to btrfs because I need raw space on the disk to do mkfs+rsync from the broken read-only btrfs filesystems. Somewhere in the future for btrfs is online fsck; however, we're not there yet. The kernel still blows up over relatively minor structural errors. FWIW I'd like to be able to mount a broken btrfs read-write, add more storage (either grow existing disks or add new ones), and then use the new storage as temporary space to build a cleaned copy of the old metadata with unreachable or broken objects dropped (preferably leaving some object behind that returns EIO when read, but can be written or deleted). Once there is clean metadata, we can rebuild free space maps (possibly collecting allocated orphan extents into lost+found), then the surviving data can be rebalanced or moved fairly easily. The grown/added disks can be shrunk/removed at the end. > By all means return an error when reading a file that is completely > missing. By all means have an extra fsck mode that goes ahead and > deletes all the missing files (assuming it has metadata) or perhaps > moves them all to a new "lost+notfound" subvolume or something. > > Indeed, if the lost device just happens to not actually contain any > data you might be lucky and not lose any data at all when losing a > single device in a filesystem that entirely uses the single profile. > That would be a bit of an edge case though, but one that is > automatically handled if you give the admin the ability to force > read-write/etc. > > -- > Rich [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: device balance times 2014-10-24 16:07 ` Zygo Blaxell @ 2014-10-24 19:58 ` Rich Freeman 0 siblings, 0 replies; 35+ messages in thread From: Rich Freeman @ 2014-10-24 19:58 UTC (permalink / raw) To: Zygo Blaxell; +Cc: Duncan, Btrfs BTRFS On Fri, Oct 24, 2014 at 12:07 PM, Zygo Blaxell <ce3g8jdj@umail.furryterror.org> wrote: > > We could also leave this as an option to the user "mount -o > degraded-and-I-want-to-lose-my-data", but in my opinion the use > case is very, very exceptional. Well, it is only exceptional if you never shut down during a conversion to raid1 as far as I understand it. :) > > IMHO the use case is common any time restoring the entire filesystem > from backups is inconvenient. That covers a *lot* of users. I never > have a machine with more than 50% of its raw disk space devoted to btrfs > because I need raw space on the disk to do mkfs+rsync from the broken > read-only btrfs filesystems. The problem is that if you want btrfs raid1 and you ALSO want to have an extra set of spares for copying your entire RAID1 to something else, you're talking about a lot of extra disk space. I really don't want to maintain a SAN just in case I have a btrfs problem. :) I realize things are still somewhat experimental now, but we need to at least think about how things will work long-term. Copying all your data to another filesystem and re-creating the btrfs filesystem isn't really a good recovery mode. Restoring from backups is also becoming increasingly difficult. IO bandwidth just has not kept pace with disk capacity. It can take the better part of a day to copy a multi-TB array, and if you need to copy it two ways you have to double the time, not to mention having multiple TB of disks lying around. -- Rich ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: device balance times 2014-10-22 1:43 ` Chris Murphy 2014-10-22 12:40 ` Piotr Pawłow @ 2014-10-22 16:15 ` Chris Murphy 2014-10-23 2:44 ` Duncan 1 sibling, 1 reply; 35+ messages in thread From: Chris Murphy @ 2014-10-22 16:15 UTC (permalink / raw) To: linux-btrfs On Oct 21, 2014, at 9:43 PM, Chris Murphy <lists@colorremedies.com> wrote: > > On Oct 21, 2014, at 4:14 PM, Piotr Pawłow <pp@siedziba.pl> wrote: > >> On 21.10.2014 20:59, Tomasz Chmielewski wrote: >>> FYI - after a failed disk and replacing it I've run a balance; it took almost 3 weeks to complete, for 120 GBs of data: >> >> Looks normal to me. Last time I started a balance after adding 6th device to my FS, it took 4 days to move 25GBs of data. > > It's long term untenable. At some point it must be fixed. It's way, way slower than md raid. Granted I'm ignoring the fact there are 5000+ snapshots, as well as the fact we were told something like ~200 is OK but things rapidly get pathological above that. Josef has some patches to better deal with this, but I'm fairly sure they're not merged yet. My "long term untenable" assertion is in relation to scalability. Another thing is the snapshot aware defrag stuff was recently pulled out and needs to be redone, which may also be a factor with this. The short term, maybe even medium term, it's "doctor, it hurts when I do this!" and the doctor says, "well then don't do that!" Chris Murphy ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: device balance times 2014-10-22 16:15 ` Chris Murphy @ 2014-10-23 2:44 ` Duncan 0 siblings, 0 replies; 35+ messages in thread From: Duncan @ 2014-10-23 2:44 UTC (permalink / raw) To: linux-btrfs Chris Murphy posted on Wed, 22 Oct 2014 12:15:25 -0400 as excerpted: > Granted I'm ignoring the fact there are 5000+ snapshots[.] > The short term, maybe even medium term, it's "doctor, it hurts > when I do this!" and the doctor says, "well then don't do that!" LOL! Nicely said! =:^) -- Duncan - List replies preferred. No HTML msgs. "Every nonfree program has a lord, a master -- and if you use the program, he is your master." Richard Stallman ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: 5 _thousand_ snapshots? even 160? (was: device balance times)
@ 2014-10-22 7:14 Tomasz Chmielewski
2014-10-22 7:41 ` Duncan
0 siblings, 1 reply; 35+ messages in thread
From: Tomasz Chmielewski @ 2014-10-22 7:14 UTC (permalink / raw)
To: linux-btrfs
> But 5000 snapshots?
>
> Why? Are you *TRYING* to test btrfs until it breaks, or TRYING to
> demonstrate a balance taking an entire year?
Remember a given btrfs filesystem is not necessarily a backup
destination for data from one source.
It can be, say, 30 or 60 daily snapshots, plus several monthly, for each
data source * number of data sources.
So while it probably will make a difference (5000 snapshots from one
source, vs 5000 snapshots made from many sources) for balance times, I
wouldn't call a large number of snapshots that unusual.
--
Tomasz Chmielewski
http://www.sslrack.com
^ permalink raw reply [flat|nested] 35+ messages in thread* Re: 5 _thousand_ snapshots? even 160? (was: device balance times) 2014-10-22 7:14 5 _thousand_ snapshots? even 160? (was: device balance times) Tomasz Chmielewski @ 2014-10-22 7:41 ` Duncan 2014-10-22 20:08 ` Zygo Blaxell 0 siblings, 1 reply; 35+ messages in thread From: Duncan @ 2014-10-22 7:41 UTC (permalink / raw) To: linux-btrfs Tomasz Chmielewski posted on Wed, 22 Oct 2014 09:14:14 +0200 as excerpted: > Remember a given btrfs filesystem is not necessarily a backup > destination for data from one source. > > It can be, say, 30 or 60 daily snapshots, plus several monthly, for each > data source * number of data sources. > > So while it probably will make a difference (5000 snapshots from one > source, vs 5000 snapshots made from many sources) for balance times, I > wouldn't call a large number of snapshots that unusual. That's what this paragraph, just above the paragraph you quoted, was all about: >> Tho that is of course per subvolume. If you have multiple subvolumes >> on the same filesystem, that can still end up being a thousand or two >> snapshots per filesystem. But those are all groups of something under >> 300 (under 100 with hourly) highly connected to each other, with the >> interweaving inside each of those groups being the real complexity in >> terms of btrfs management. IOW, if you thin down the snapshots per subvolume to something reasonable (under 300 for sure, preferably under 100), then depending on the number of subvolumes you're snapshotting, you might have a thousand or two. However, of those couple thousand, btrfs will only have to deal with the under 300 and preferably well under a hundred in the same group, that are snapshots of the same thing and thus related to each other, at any given time. The other snapshots will be there but won't be adding to the complexity near as much since they're of different subvolumes and aren't logically interwoven together with the ones being considered at that moment. But even then, at say 250 snapshots per subvolume, 2000 snapshots is 8 independent subvolumes. That could happen. But 5000 snapshots? That'd be 20 independent subvolumes, which is heading toward the extreme again. Yes it could happen, but better if it does to cut down on the per- subvolume snapshots further, to say the 25 per subvolume I mentioned, or perhaps even further. 25 snapshots per subvolume with those same 20 subvolumes... 500 snapshots total instead of 5000. =:^) -- Duncan - List replies preferred. No HTML msgs. "Every nonfree program has a lord, a master -- and if you use the program, he is your master." Richard Stallman ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: 5 _thousand_ snapshots? even 160? (was: device balance times) 2014-10-22 7:41 ` Duncan @ 2014-10-22 20:08 ` Zygo Blaxell 2014-10-22 20:37 ` Robert White 2014-10-23 4:30 ` Chris Murphy 0 siblings, 2 replies; 35+ messages in thread From: Zygo Blaxell @ 2014-10-22 20:08 UTC (permalink / raw) To: Duncan; +Cc: linux-btrfs [-- Attachment #1: Type: text/plain, Size: 2597 bytes --] On Wed, Oct 22, 2014 at 07:41:32AM +0000, Duncan wrote: > Tomasz Chmielewski posted on Wed, 22 Oct 2014 09:14:14 +0200 as excerpted: > >> Tho that is of course per subvolume. If you have multiple subvolumes > >> on the same filesystem, that can still end up being a thousand or two > >> snapshots per filesystem. But those are all groups of something under > >> 300 (under 100 with hourly) highly connected to each other, with the > >> interweaving inside each of those groups being the real complexity in > >> terms of btrfs management. > > IOW, if you thin down the snapshots per subvolume to something reasonable > (under 300 for sure, preferably under 100), then depending on the number > of subvolumes you're snapshotting, you might have a thousand or two. > However, of those couple thousand, btrfs will only have to deal with the > under 300 and preferably well under a hundred in the same group, that are > snapshots of the same thing and thus related to each other, at any given > time. The other snapshots will be there but won't be adding to the > complexity near as much since they're of different subvolumes and aren't > logically interwoven together with the ones being considered at that > moment. > > But even then, at say 250 snapshots per subvolume, 2000 snapshots is 8 > independent subvolumes. That could happen. But 5000 snapshots? That'd > be 20 independent subvolumes, which is heading toward the extreme again. > Yes it could happen, but better if it does to cut down on the per- > subvolume snapshots further, to say the 25 per subvolume I mentioned, or > perhaps even further. 25 snapshots per subvolume with those same 20 > subvolumes... 500 snapshots total instead of 5000. =:^) If you have one subvolume per user and 1000 user directories on a server, it's only 5 snapshots per user (last hour, last day, last week, last month, and last year). I hear this is a normal use case in the ZFS world. It would certainly be attractive if there was working quota support. I have datasets where I record 14000+ snapshots of filesystem directory trees scraped from test machines and aggregated onto a single server for deduplication...but I store each snapshot as a git commit, not as a btrfs snapshot or even subvolume. We do sometimes run queries like "in the last two years, how many times did $CONDITION occur?" which will scan a handful files in all of the snapshots. The use case itself isn't unreasonable, although using the filesystem instead of a more domain-specific tool to achieve it may be. [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: 5 _thousand_ snapshots? even 160? (was: device balance times) 2014-10-22 20:08 ` Zygo Blaxell @ 2014-10-22 20:37 ` Robert White 2014-10-23 3:09 ` Zygo Blaxell 2014-10-23 4:30 ` Chris Murphy 1 sibling, 1 reply; 35+ messages in thread From: Robert White @ 2014-10-22 20:37 UTC (permalink / raw) To: Zygo Blaxell, Duncan; +Cc: linux-btrfs On 10/22/2014 01:08 PM, Zygo Blaxell wrote: > I have datasets where I record 14000+ snapshots of filesystem directory > trees scraped from test machines and aggregated onto a single server > for deduplication...but I store each snapshot as a git commit, not as > a btrfs snapshot or even subvolume. > > We do sometimes run queries like "in the last two years, how many times > did $CONDITION occur?" which will scan a handful files in all of the > snapshots. The use case itself isn't unreasonable, although using the > filesystem instead of a more domain-specific tool to achieve it may be. > Okay, sure. And as stated by others, there _are_ use cases that are exceptional. But such an archival system most likely does not _need_ to be balanced etc with any frequency, or likely ever because it isn't experiencing churn from dynamic use. In the world of trade-offs, trade-offs happen. The guy who cited the 5000 snapshots said they were hourly and taken because he might remove an important file or something. This is _way_ more action than the feared condition. ASIDE: While fixing someone's document archive RAID device (a Sun hardware device the size of a fridge) back in 1997 or so I discovered that they'd disabled _all_ the hardware cache features. When asked I was told that "the procedure for replacing a failed drive required the cache device to be cleared by pressing the red button" and they were afraid that, should that day come, someone would forget to press that button... so they'd turned off the feature entirely. This is a form of unreasonable paranoia. They were afraid that someone in the future would not follow the directions would be printed on both the machine and the new drive (these were _not_ commodity parts). When an over-abundance of caution passes beyond reasonable expectations, performance will suffer. The system is immaterial, the rule holds. What's worse is it becomes very like "security theater" only its "a backup show" where no actual backing up is really happening in any useful sense. And god save you picking which version of a file was the last "good one". So in your use case, your git repository of snapshots isn't actually "live" on the production server you are archiving, right? So too, it would be reasonable to btrfs send periodic snapshots to an archive system, retain lots and lots of them, and expect reasonable performance of your queries. And you cold expect reasonable performance in your maintenance. But "reasonable performance" in the maintenance case is massively different than reasonable performance in use cases. Indeed if you try to balance multiple terabytes of data spread across thousands of snapshots you'll be taking a lot of time. A _perfectly_ _reasonable_ lot of time for the operation at hand. But if you expect to be able to do maintenance (like btrfsck your production box with its 5k snapshots) in just a few minutes when you've got logarithmic-rate meta data to shuffle through... well good luck with that. ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: 5 _thousand_ snapshots? even 160? (was: device balance times) 2014-10-22 20:37 ` Robert White @ 2014-10-23 3:09 ` Zygo Blaxell 0 siblings, 0 replies; 35+ messages in thread From: Zygo Blaxell @ 2014-10-23 3:09 UTC (permalink / raw) To: Robert White; +Cc: Duncan, linux-btrfs [-- Attachment #1: Type: text/plain, Size: 4046 bytes --] On Wed, Oct 22, 2014 at 01:37:15PM -0700, Robert White wrote: > On 10/22/2014 01:08 PM, Zygo Blaxell wrote: > >I have datasets where I record 14000+ snapshots of filesystem directory > >trees scraped from test machines and aggregated onto a single server > >for deduplication...but I store each snapshot as a git commit, not as > >a btrfs snapshot or even subvolume. > > > >We do sometimes run queries like "in the last two years, how many times > >did $CONDITION occur?" which will scan a handful files in all of the > >snapshots. The use case itself isn't unreasonable, although using the > >filesystem instead of a more domain-specific tool to achieve it may be. > > Okay, sure. And as stated by others, there _are_ use cases that are > exceptional. > > But such an archival system most likely does not _need_ to be > balanced etc with any frequency, or likely ever because it isn't > experiencing churn from dynamic use. > > In the world of trade-offs, trade-offs happen. > > The guy who cited the 5000 snapshots said they were hourly and taken > because he might remove an important file or something. This is > _way_ more action than the feared condition. > When an over-abundance of caution passes beyond reasonable > expectations, performance will suffer. The system is immaterial, the > rule holds. > > What's worse is it becomes very like "security theater" only its "a > backup show" where no actual backing up is really happening in any > useful sense. And god save you picking which version of a file was > the last "good one". > > So in your use case, your git repository of snapshots isn't actually > "live" on the production server you are archiving, right? I'm not sure if this question is directed at me or 5000-snapshots-guy. 5000-snapshots-guy was not using git. I'd say he's using btrfs snapshots to do a job git is much better at. My 14K-snapshot git repo is on my production server. The data in the repo is aggregated to that server from many other smaller (tiny) machines. Each smaller machine's data is replicated to the git working directory and a git commit generated from it. After the commit is created, we replace the working tree with the next machine's data and repeat. The entire git repo is replicated by git fetch/push to a couple of other servers, so if the main git repo goes down we just swap it with one of the clone servers in a few minutes. No btrfs snapshots are involved. One of the clone servers doesn't even have btrfs at all. git's packing algorithm does a much more thorough job of compression and deduplication than a mere filesystem can. We can store 3,000 current snapshots of 15GB of raw data in 10GB of disk space, and another 11,000 older snapshots in 25GB. I don't think btrfs snapshots can do better, or even get close, to that kind of storage efficiency. The point I was making was that btrfs snapshots aren't the best tool, or even a reasonably good tool, for this particular use case (5000 snapshots of a single subvolume on one server). > So too, it would be reasonable to btrfs send periodic snapshots to > an archive system, retain lots and lots of them, and expect > reasonable performance of your queries. > > And you cold expect reasonable performance in your maintenance. > > But "reasonable performance" in the maintenance case is massively > different than reasonable performance in use cases. Indeed if you > try to balance multiple terabytes of data spread across thousands of > snapshots you'll be taking a lot of time. A _perfectly_ _reasonable_ > lot of time for the operation at hand. ...unless you are balancing because you're replacing a RAID1 disk. That's a good reason to be wary of too many snapshots even if the data is fairly static. > But if you expect to be able to do maintenance (like btrfsck your > production box with its 5k snapshots) in just a few minutes when > you've got logarithmic-rate meta data to shuffle through... well > good luck with that. [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: 5 _thousand_ snapshots? even 160? (was: device balance times) 2014-10-22 20:08 ` Zygo Blaxell 2014-10-22 20:37 ` Robert White @ 2014-10-23 4:30 ` Chris Murphy 2014-10-23 5:18 ` Robert White 1 sibling, 1 reply; 35+ messages in thread From: Chris Murphy @ 2014-10-23 4:30 UTC (permalink / raw) To: Btrfs BTRFS On Oct 22, 2014, at 4:08 PM, Zygo Blaxell <zblaxell@furryterror.org> wrote: > > If you have one subvolume per user and 1000 user directories on a server, > it's only 5 snapshots per user (last hour, last day, last week, last > month, and last year). Sure. So if Btrfs is meant to address scalability, then perhaps at the moment it's falling short. As it's easy to add large drives and get very large multiple device volumes, the snapshotting needs to scale also. I'd say per user, it's reasonable to have 24 hourly (one snapshot per hour for a day), 7 daily, 4 weekly, and 12 monthly snapshots, or 47 snapshots. That's 47,000 snapshots if it's sane for a single Btrfs volume to host 1000 users. Arguably, such a system is better off with a distributed fs: Gluster FS or GFS2 or Ceph. Chris Murphy ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: 5 _thousand_ snapshots? even 160? (was: device balance times) 2014-10-23 4:30 ` Chris Murphy @ 2014-10-23 5:18 ` Robert White 2014-10-23 8:38 ` Duncan 2014-10-23 13:15 ` Zygo Blaxell 0 siblings, 2 replies; 35+ messages in thread From: Robert White @ 2014-10-23 5:18 UTC (permalink / raw) To: Chris Murphy, Btrfs BTRFS On 10/22/2014 09:30 PM, Chris Murphy wrote: > Sure. So if Btrfs is meant to address scalability, then perhaps at the moment it's falling short. As it's easy to add large drives and get very large multiple device volumes, the snapshotting needs to scale also. > > I'd say per user, it's reasonable to have 24 hourly (one snapshot per hour for a day), 7 daily, 4 weekly, and 12 monthly snapshots, or 47 snapshots. That's 47,000 snapshots if it's sane for a single Btrfs volume to host 1000 users. Arguably, such a system is better off with a distributed fs: Gluster FS or GFS2 or Ceph. Is one subvolume per user a rational expectation? Is it even particularly smart? Dooable, sure, but as a best practice it doesn't seem that useful because it multiplies the maintenace by the user base. Presuming a linux standard base layout (which is very presumptive) having the 47 snapshots of /home instead of the 47,000 snapshots of /home/X(1000) is just as workable, if not moreso. A reflink recursive copy of /home/X(n) from /home_Backup_date/X(n) is only trivially longer than resnapshotting the individual user. Again this gets into the question not of what exercises well to create the snapshot but what functions well during a restore. People constantly create "backup solutions" without really looking at the restore path. I can't get anybody here to answer the question about "btrfs fi li -s /" and setting/resetting the "snapshot" status of a subvolume. I've been told "snapshots are subvolumes" which is fine, but since there _is_ a classification mechanism things get all caca if you rely on the "-s" in your scripting and then promote a snapshot back into prime activity. (seriously compare the listing with and without -s, note its natural affinity for classifying subvolumes, then imagine the horror of needing to take /home_backup_date and make it /home.) Similar problems obtain as soon as you consider the daunting task of shuffling through 47,000 snapshots instead of just 47. And if you setup each user on their own snapshot what happens the first time two users want to hard-link a file betwixt them? Excessive segmentation of storage is an evil unto itself. YMMV, of course. An orthoginal example: If you give someone six disks and tell them to make an encrypted raid6 via cryptsetup and mdadm, at least eight out of ten will encrypt the drives and then raid the result. But it's _massivly_ more efficent to raid the drives and then encrypt the result. Why? Because writing a block with the latter involves only one block being encrypted/decrypted. The former, if the raid is fine involves several encryptions/decryptions and _many_ if the raid is degraded. The above is a mental constraint, a mistake, that is all to common because people expect encrytion to be "better" the closer you get to the spinning rust. So too people expect that segmentation is somehow better if it most closely matches the abstract groupings (like per user) but in practical terms it is better matched to the modality, where, for instance, all users are one kind of thing, while all data stores are another kind of thing. We were just talking about putting all your VMs and larger NOCOW files into a separate subvolume/domain because of their radically different write behaviors. Thats a sterling reason to subdivide the storage. So is / vs. /var vs. /home as three different domains with radically different update profiles. So while the natural impulse is to give each user its own subvolume it's not likely to be that great an idea in practice because... um... 47,000 snapshots dude, and so on. ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: 5 _thousand_ snapshots? even 160? (was: device balance times) 2014-10-23 5:18 ` Robert White @ 2014-10-23 8:38 ` Duncan 2014-10-23 13:15 ` Zygo Blaxell 1 sibling, 0 replies; 35+ messages in thread From: Duncan @ 2014-10-23 8:38 UTC (permalink / raw) To: linux-btrfs Robert White posted on Wed, 22 Oct 2014 22:18:09 -0700 as excerpted: > On 10/22/2014 09:30 PM, Chris Murphy wrote: >> Sure. So if Btrfs is meant to address scalability, then perhaps at the >> moment it's falling short. As it's easy to add large drives and get >> very large multiple device volumes, the snapshotting needs to scale >> also. I believe it's a fair statement to say that many aspects of btrfs in general simply don't scale well at this point. Many of the features are there; we're now getting to the point where many of those features are reasonably bug-free, altho that's definitely an ongoing thing; but pretty much wherever you turn and whatever you look at, btrfs is in general not yet optimized. * The raid1 device-read-selection algorithm is simply even/odd-PID- based. That's great for a first implementation, since it's simple enough to implement and it works well enough to know that reading from either copy works, but it's horrible for a final, scalable implementation, since too many use-cases will be nearly all even or all odd pids. * Btrfs multi-device-writes are nearly all serialized, one at a time, instead of scheduling writes to all devices at once in ordered to maximize bandwidth over the individual-device-speed bottleneck. * Btrfs snapshot-aware-defrag was introduced to much fanfare, and then disabled a couple kernel series later when it became very apparent it simply didn't scale, and the lack of scaling meant it didn't work /at/ /all/ for many users. * The quota implementation was just recently pretty much entirely rewritten due to serious corner-case breakage and lack of scaling (one of the contributors to the defrag and balance scaling issues, as it happens). * The autodefrag mount option doesn't scale well beyond a few hundred MiB or with frag-triggering file updates coming in faster than the entire file can be rewritten (there's plans to make this better, but the time to code and test simply hasn't been available yet). * This thread is about the balance scaling issues, a good portion of which boil down to extremely poorly optimized quota and snapshot handling, and another problem set to no choice but extent-based operations, which are great for some things but don't work well when all you want to do is duplicate chunks in a conversion to raid1 mode, for instance. That's what I think of off the top of my head. I'm sure there's more. However, specifically addressing snapshotting, while optimizing for speed and scale will certainly help, I'm not sure btrfs will ever be what might be called a speed demon in the area. If that is indeed the case, and I don't know but it's certainly possible, then for the future, and regardless of the future, definitely for the present, that means it's absolutely /critical/ for the human side to optimize things to keep things like number of snapshots from growing out of reasonable management range. ... >> I'd say per user, it's reasonable to have 24 hourly (one snapshot per >> hour for a day), 7 daily, 4 weekly, and 12 monthly snapshots, or 47 >> snapshots. That's 47,000 snapshots if it's sane for a single Btrfs >> volume to host 1000 users. Arguably, such a system is better off with a >> distributed fs: Gluster FS or GFS2 or Ceph. > > Is one subvolume per user a rational expectation? Is it even > particularly smart? Dooable, sure, but as a best practice it doesn't > seem that useful because it multiplies the maintenace by the user base. > > Presuming a linux standard base layout (which is very presumptive) > having the 47 snapshots of /home instead of the 47,000 snapshots of > /home/X(1000) is just as workable, if not moreso. A reflink recursive > copy of /home/X(n) from /home_Backup_date/X(n) is only trivially longer > than resnapshotting the individual user. > > Again this gets into the question not of what exercises well to create > the snapshot but what functions well during a restore. > > People constantly create "backup solutions" without really looking at > the restore path. > ... Which is where this discussion comes in. FWIW, over more than a decade of fine tuning and experience with a number of disaster and recovery cases here, I've come up with what is for me a reasonably close to ideal multiple partition layout. That's actually one of the big reasons I don't use subvolumes here; I don't need to because I already have a nearly perfect... for my use-case... independent partitions layout. Here's my point. Via trial and error I concluded almost the exact same point that Chris is making about subvolumes, only for independent partitions. The discussed example is subvolumes for individual users in /home, vs. one big subvolume for /home itself (or arguably, if there's a convenient user-role-based separation, perhaps a subvolume for say teacher-home and another for student-home, or for user-home, group-leader-home, upper- management-home, etc). The same lesson, however, applies to say all distro-update storage, in my (gentoo) case, the main distro package ebuild tree, the overlays, binpkgs for my 64-bit builds, binpkgs for my 32-bit builds, 64-bit ccache, 32-bit ccache, the separate (mainstream git) kernel repo and individual build dirs for 32-bit and 64-bit kernels, etc. Back when I first split things up, most of those were in individual partitions. Now I just have one partition with all those components in it, in separate subdirs, and symlinks from the various other locations in my layout to the various components in this partition. Why? Because managing all of them separately was a pain, and I tended to mount and unmount most of them together anyway, when I did system updates. Similarly, in my original setup I had the traditional small /, with /etc, but with an independent /usr and /var, and /var/log independent of /var. I still have /var/log independent of the others since limiting a runaway logging scenario to an independent log partition makes very good sense and logging is its own logical task, but /usr is on / now, as is /var itself, but with individual subdirs of for instance /var/lib symlinked elsewhere. Why? Because at one point I had an A/C failure, here in Phoenix in the middle of the summer, when I was gone. I came home to a a 50C+ house, a heat-induced head-crashed disk and a frozen CPU. Recovering from that disaster was a nightmare, because while I had backups, I ended up with a root backup from one date, a /usr backup from a different date, and a /var, including the record of what packages and files were installed, from a third date. So my record (in /var/db) of what was installed didn't match /usr, which didn't match /! So everything that the distro actually installs, including the database of what is actually installed, with one limited exception, is now all on the same partition, root! If I have to recover from backup, whether I'm recovering from yesterday's backup or one made a year ago, there's one thing I'll be sure of, the database of what's installed will match what's actually there, because it's on the same system root partition and thus the same backup! And that system partition is now mounted read-only by default. I only mount it writable in ordered to update, either packages or system configuration. When I'm done with the update I sudo systemctl emergency, hit ctrl-d to get back to normal mode without logging into emergency mode and log back into normal mode, systemctl daemon-reexec if systemd itself was updated (thus restarting all programs including init/systemd itself, so no stale and deleted libs are still in use), and remount ro /. Which brings me to the limited /var exception I mentioned earlier. While /var is supposed to be variable/writable, in practice, many system processes only need to write to their /var subdir if they're updated. These can stay on /var. The few others, the ones that really need a writable /var subdir, have that subdir actually linked back to a similarly named subdir in /home/var/, which is mounted writable by default. That lets me keep /, including the rest of /var (with the exception of /var/tmp, which is tmpfs), read-only by default. As it happens, these writable-necessary /var/ subdirs aren't critical to early boot, and if for some reason /home is unmountable (as it was along with /var/log at one point recently when the writable at crash /home btrfs refused to mount, but /, being read-only at crash, wasn't harmed), I can either do without temporarily, or reconstruct an empty or default /var subdir for them in tmpfs or whatever. One critical thing that makes this all work is the existence of symlinks in various locations, pointing to the real locations on the partition where logical function-grouping places them. But all this simply reinforces the point. Logically function-group subdirs on subvolumes much as I logically function-group subdirs on independent partitions, and you won't be /dealing/ with 47K snapshots, 47 snapshots each of 1000 individual user subvolumes. You might be dealing with 47 snapshots of /home, with 1000 users on it, or you might function- group a bit further and have 47 snapshots each of mgmt-home, user-home, and teamldr-home, so 141 snapshots total for all of homedirs, but that's still reasonable with btrfs' current scaling, while 47K snapshots, forget it! And take it from me, it makes it FAR easier to deal with backup and testing, with disaster recovery should it be necessary, and with other sysadmin level maintenance as well. Tho of course I'd personally argue that for reliability and recoverability reasons, each of those function-groups should be an independent partition, not just a subvolume that should the filesystem go down, it'll take all the subvolumes with it. But that's an entirely different argument to be had... Regardless of whether it's subvolumes or independent partitions and filesystems, however, the same point applies. > I can't get anybody here to answer the question about "btrfs fi li -s /" > and setting/resetting the "snapshot" status of a subvolume. I wish I knew the answer. But as I said above, I don't do subvolumes, or for that matter, snapshots, myself, preferring fully independent partitions, and fully independent "snapshot" backups to same-size backup partitions located elsewhere, so I can simply point the mount at the backup and mount it in place of the previously working copy for recovery should it be necessary. So I've not had to investigate that for personal reasons, and while I've an academic interest as well as an interest in knowing it simply to help others here, I've seen nobody else post a satisfactory answer, so... I share your frustration, tho at the academic and help-others level, not the personal installation operations level. > I've been > told "snapshots are subvolumes" which is fine, but since there _is_ a > classification mechanism things get all caca if you rely on the "-s" in > your scripting and then promote a snapshot back into prime activity. > (seriously compare the listing with and without -s, note its natural > affinity for classifying subvolumes, then imagine the horror of needing > to take /home_backup_date and make it /home.) By all means explain to me how this won't work if so, but it seems to me the following is a reasonably effective workaround that shouldn't take /too/ much more time... 1) According to the wiki, cross-subvolume reflinks now (since 3.6) work. See the explanatory text for the following (watch the linkwrap): https://btrfs.wiki.kernel.org/index.php/ UseCases#Can_I_take_a_snapshot_of_a_directory.3F Note that based on the above link, reflinks won't work if the subvolumes are separately mounted, that is, across separate mount-points. However, as long as it's a single common "parent" mount, with the subvolumes simply accessed under it as if they were subdirs, reflink-copying should "just work". Based on that... 2) Mount a parent (which might be the root subvolume) to both the backup- snapshot and the intended target subvolume, creating the new target subvolume as necessary. 3) Reflink-copy recursively from the backup to the target, as if you were traditionally backup-restoring from a backup mounted elsewhere, except using the parent-subvolume mount paths so you don't cross mount-points, and using reflink-copying to dramatically speed the process. 4) When you are done, you should have a non-snapshot subvolume restored and ready for use, almost as if you were able to directly mount the snapshot in place of the non-snapshot original, removing its snapshot property in the process. 5) If desired, delete the backup snapshot, thus completing the parallel. Alternatively, keep it where it is. After all, you needed to restore from it once, what's to say something else won't happen to kill the restored version, thus triggering the need for another restore? Surely that'd be bad juju, but better to still have that backup snapshot on hand, then to have just moved it to production, and then lost it too. =:^) > Similar problems obtain as soon as you consider the daunting task of > shuffling through 47,000 snapshots instead of just 47. > > And if you setup each user on their own snapshot what happens the first > time two users want to hard-link a file betwixt them? See the above cross-subvol reflink discussion... > Excessive segmentation of storage is an evil unto itself. ... But never-the-less, absolutely agreed. =:^) > YMMV, of course. > > An orthoginal example: > > If you give someone six disks and tell them to make an encrypted raid6 > via cryptsetup and mdadm, at least eight out of ten will encrypt the > drives and then raid the result. But it's _massivly_ more efficent to > raid the drives and then encrypt the result. Why? Because writing a > block with the latter involves only one block being encrypted/decrypted. > The former, if the raid is fine involves several encryptions/decryptions > and _many_ if the raid is degraded. > > The above is a mental constraint, a mistake, that is all to common > because people expect encrytion to be "better" the closer you get to the > spinning rust. This totally unexpected but useful jewel is part of why I'm addicted to newsgroups and mailing lists. (FWIW, I do this list as a newsgroup via gmane.org's list2news service.) Totally unexpected "orthogonal examples", which can be immensely useful all on their own. =:^) FWIW I haven't gotten much into encrypted storage here, but I keep thinking about it, and were I to have done so before reading this, I might have made exactly that mistake myself. OTOH, with btrfs raid replacing mdraid, individually encrypted block devices are (currently) necessary, because btrfs merges the filesystem and raid levels. Tho direct btrfs encryption support is apparently planned, and if/when that's implemented, one could expect they'll address your point and internally layer the encryption over the raid. Tho I expect that'd be a weaker encryption implementation if done that way, because part of the advantage of btrfs raid is that the filesystem structures work down thru the raid level as well, so individual chunk structures appear at the device level below the raid. If encryption is then built over the raid, that would mean the encryption would need to pass the individual chunk structures thru so btrfs raid could still use them, and that would be a critical information leak to the encrypted side. So if btrfs does implement encryption, one would hope they'd either have a config option for above or below the raid level, or that they'd do it the less efficient multi-encryption way below the raid, thus not having to pass that information thru the encryption to the raid, leaking it in the process. > So while the natural impulse is to give each user its own subvolume it's > not likely to be that great an idea in practice because... um... 47,000 > snapshots dude, and so on. Agreed. =:^) -- Duncan - List replies preferred. No HTML msgs. "Every nonfree program has a lord, a master -- and if you use the program, he is your master." Richard Stallman ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: 5 _thousand_ snapshots? even 160? (was: device balance times) 2014-10-23 5:18 ` Robert White 2014-10-23 8:38 ` Duncan @ 2014-10-23 13:15 ` Zygo Blaxell 1 sibling, 0 replies; 35+ messages in thread From: Zygo Blaxell @ 2014-10-23 13:15 UTC (permalink / raw) To: Robert White; +Cc: Chris Murphy, Btrfs BTRFS [-- Attachment #1: Type: text/plain, Size: 5233 bytes --] On Wed, Oct 22, 2014 at 10:18:09PM -0700, Robert White wrote: > On 10/22/2014 09:30 PM, Chris Murphy wrote: > >Sure. So if Btrfs is meant to address scalability, then perhaps at the moment it's falling short. As it's easy to add large drives and get very large multiple device volumes, the snapshotting needs to scale also. > > > >I'd say per user, it's reasonable to have 24 hourly (one snapshot per hour for a day), 7 daily, 4 weekly, and 12 monthly snapshots, or 47 snapshots. That's 47,000 snapshots if it's sane for a single Btrfs volume to host 1000 users. Arguably, such a system is better off with a distributed fs: Gluster FS or GFS2 or Ceph. > > Is one subvolume per user a rational expectation? Is it even > particularly smart? Dooable, sure, but as a best practice it doesn't > seem that useful because it multiplies the maintenace by the user > base. For snapshots alone it doesn't make much sense, but there are other btrfs features that work in subvolume units. Some people want quota and send/receive to work on a per-user level too. If 'btrfs subvolume' had a '-r' recursive option, it would make management easier. Even without -r, /home/* can be managed by a simple shell loop with a wildcard: makeSnapshot () { btrfs sub create "/snapshots/$1" for x in /home/*; do btrfs sub snap "$x" "/snapshots/$1/$x"; done } makeSnapshot "/home/.snapshots/$(date +%Y-%m-%d-%H-%M-%S)" > Presuming a linux standard base layout (which is very presumptive) > having the 47 snapshots of /home instead of the 47,000 snapshots of > /home/X(1000) is just as workable, if not moreso. A reflink > recursive copy of /home/X(n) from /home_Backup_date/X(n) is only > trivially longer than resnapshotting the individual user. reflink copies are much slower than snapshots. For that matter, making a writable snapshot of the entire /home as one subvolume, then using 'rm -rf' to get rid of what we don't need for one particular snapshot is *also* faster than reflink copies. More precisely, the bulk of the total life-cycle execution time is at the beginning with reflink copies (have to create shared extent ref items, traverse the source directories, and allocate new directory trees, all while racing against data modifications) and at the end with snapshots (btrfs-cleaner has to remove unreferenced tree nodes and extents in the background) or snap-then-trim (replace btrfs-cleaner with rm -rf). > Again this gets into the question not of what exercises well to > create the snapshot but what functions well during a restore. > > People constantly create "backup solutions" without really looking > at the restore path. It's not all about backups. > And if you setup each user on their own snapshot what happens the > first time two users want to hard-link a file betwixt them? One of the features of per-user subvolumes is that such things are completely forbidden. Security issues, user confusion, and all that. Deduplication by extent sharing (and reflink copy) doesn't care about subvolumes as long as you do the clone through a common parent of the user subvolumes (i.e. /home). The result isn't a hardlink which keeps users happy, and shares underlying storage which keeps admins with storage budget issues happy. > Excessive segmentation of storage is an evil unto itself. > > YMMV, of course. > > An orthoginal example: > > If you give someone six disks and tell them to make an encrypted > raid6 via cryptsetup and mdadm, at least eight out of ten will > encrypt the drives and then raid the result. But it's _massivly_ > more efficent to raid the drives and then encrypt the result. Why? That seems...implausible. They would need to enter the passphrases six times too. > Because writing a block with the latter involves only one block > being encrypted/decrypted. The former, if the raid is fine involves > several encryptions/decryptions and _many_ if the raid is degraded. It would be the correct answer if you needed to keep the structure of the storage array secret...or if you wanted to use btrfs to implement the RAID layer, and needed the encrypted layer to be divided along the same boundaries as the physical layer. > The above is a mental constraint, a mistake, that is all to common > because people expect encrytion to be "better" the closer you get to > the spinning rust. > > So too people expect that segmentation is somehow better if it most > closely matches the abstract groupings (like per user) but in > practical terms it is better matched to the modality, where, for > instance, all users are one kind of thing, while all data stores are > another kind of thing. > > We were just talking about putting all your VMs and larger NOCOW > files into a separate subvolume/domain because of their radically > different write behaviors. Thats a sterling reason to subdivide the > storage. So is / vs. /var vs. /home as three different domains with > radically different update profiles. > > So while the natural impulse is to give each user its own subvolume > it's not likely to be that great an idea in practice because... > um... 47,000 snapshots dude, and so on. [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 35+ messages in thread
end of thread, other threads:[~2014-10-24 19:58 UTC | newest] Thread overview: 35+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-10-21 18:59 device balance times Tomasz Chmielewski 2014-10-21 20:14 ` Piotr Pawłow 2014-10-21 20:44 ` Arnaud Kapp 2014-10-22 1:10 ` 5 _thousand_ snapshots? even 160? (was: device balance times) Robert White 2014-10-22 4:02 ` Zygo Blaxell 2014-10-22 4:05 ` Duncan 2014-10-23 20:38 ` 5 _thousand_ snapshots? even 160? Arnaud Kapp 2014-10-22 11:30 ` Austin S Hemmelgarn 2014-10-22 17:32 ` Goffredo Baroncelli 2014-10-22 11:22 ` device balance times Austin S Hemmelgarn 2014-10-22 1:43 ` Chris Murphy 2014-10-22 12:40 ` Piotr Pawłow 2014-10-22 16:59 ` Bob Marley 2014-10-23 7:39 ` Russell Coker 2014-10-23 8:49 ` Duncan 2014-10-23 9:19 ` Miao Xie 2014-10-23 11:39 ` Austin S Hemmelgarn 2014-10-24 1:05 ` Duncan 2014-10-24 2:35 ` Zygo Blaxell 2014-10-24 5:13 ` Duncan 2014-10-24 15:18 ` Zygo Blaxell 2014-10-24 10:58 ` Rich Freeman 2014-10-24 16:07 ` Zygo Blaxell 2014-10-24 19:58 ` Rich Freeman 2014-10-22 16:15 ` Chris Murphy 2014-10-23 2:44 ` Duncan -- strict thread matches above, loose matches on Subject: below -- 2014-10-22 7:14 5 _thousand_ snapshots? even 160? (was: device balance times) Tomasz Chmielewski 2014-10-22 7:41 ` Duncan 2014-10-22 20:08 ` Zygo Blaxell 2014-10-22 20:37 ` Robert White 2014-10-23 3:09 ` Zygo Blaxell 2014-10-23 4:30 ` Chris Murphy 2014-10-23 5:18 ` Robert White 2014-10-23 8:38 ` Duncan 2014-10-23 13:15 ` Zygo Blaxell
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).