 To beré je ještě být načinat, takhle vždyš. Tam je. Může býtureský. To je štef s kísmi, to je škoda. Proste, to je škoda. Nená acres. Proste, ne? Nenák, to je škoda. Když máš, tak to tam je. Máš, to je škoda. Teď vlastní potoby, ani nená. Mama hnej. To je taky glasztor. To je NFSG naše aglastro. No, je snad. A to na tím je taky glasztor. To je taky proti, že to nevědá na nějakou vyniakty. Třidou sami zvání. Nechce tam dávědí nastavit? Já. Ty si nastavíš cemí šest. Taky to zabudují. Já pokojně nepotřebujem. Já si ještě si snad na honinky. Já už jiním, jak po nějakou honi. Přece tam jste tešali. Díky díky. Díky díky. Tak jak budím to můžete hodit drabnout, si myslím, že ty lidi já drav. Ale nebo, že si můžete už po předávci. To je házo. To je házo, jak tu flašku do ta vzad. Házo, to tam do třetí žady nebudeš do toho. OK, čeště s návom? Čeště s návom? Čeště s návom? Čeště s návom? Čeště s návom? Čeště s návom? Čeště s návom? Čeště s návom? Čeště s návom? Češtěтра stá Haildeva, stejně nám festívný, a účitá se o r都 paará z들out Ampěasy ale obj prata Pravat nebo místřt o kamení L거ven. a veliké návěy, které než jde, na mě. A je to veliké hudba, aby se země se odvěděla všechno v tím významení. A když jsem věděl, jak je to, co to je hudba, které mě přijet? Proste, jsem vždyl, jak je hudba, která je hudba kteřit. by se těch technologiů zvízili z význameného pro prográm a plikáci. Vyznam vám těch technologiů z význameného pro prográm a z význameného pro plikáci. Ale vždyž jsem dělal, že když jsem prográm a větkáme větká s tím, který je významené s významené technologiů, z tím, že jsem významené nějaké větkávny a apiány, které bychom větkávali, že se to dělal. a a to bylo hodně hodně bylo hodně v hladě a také jsem mýl, že nebo v hladě nebo v hladě a jsem si si zvíždol, že jsme nějaké pohledení a my jsme v hladě nebo v hladě nebo v hladě a takého můžu díky jeho hladě nebo v hladě nebo v hladě a předtím se zvukovat zvukovat lend a lend nebo nezvukovat. Prvědějte, když jsem vytvíl, když jsem vytvíl. To je měla vytvíl, když jsem vytvíl. Toto je totálně vyskřit, a ještě se, jak se nevíte, si složí, když se vytvíl. A jsem se nevíte. To je tak, jak se složí. Máme nějaké třeba léří, které je třeba disks, prosím když třeba antepráz, když máme nejvědějné nám a děláme. Takže když jsme disks, které jsme HDDs, které jsme ještě nejvědější technologi. Máme SSDs, které jsme třeba složit HDDs, které jsou komplementová HDDs. Máme se soličení, které se složit HDDs a SSDs v zájtě, které se složit HDDs a SSDs vysvědějí se v tom, které se složit HDDs a SSDs a SSDs. Máme smr, které je složit HDDs, které jsou které se složit HDDs, které jsou kamovala složit HDDs, které jsou tomhle chnětný technologi a disk'ta technologi. A měždá složit HDDs a disk'tá technologi. které jsou nónahvěla týle zběžků, které jsou superávěle, superpravdu a superačná a jste se z nejvědětého zběžka. Nejdělejíme tedy tedy zběžky, které jsou ním, když jsou zběžky k těchto zběžky. Není máme nějakéhle zvědětné technologie. Když je, mohou přijít, když se tím, který je třeba transportovat vyskázil protokolou, dvětné protokolou, nebo internetu. Máme zfcp, který je fc a fcoe, kde je fibratelný a fibratelný. Zfcp je zbm system zy implementovatelné protokolu. Až tam je to zlepe na začnitém plou nejlepších vyskávů. Po tom, co byly v požadku, nám to hodil, je to dělá v tom nejlepších vyskávů. A tady budeme seệnovat. Když sem už zelo vyštím, že jsme to nevz τις vyskávů uniknou a peníze. A to je nezavředné hodila. A to already než máme nálé dýzvy. Které jsme zazupinat než do vyskávů. že se potřeba být vzážitý a vzážitý, který je format. Máme partíšný technik, alež v tomto, když mám vždy nejlepší technik. Teď jsou MBR, masterblood record a GPT-tables, které je partíšný. MD je smutný devices, který je kernel driver, nebo když je driver, který je konec, a v mnohého věději se o software rate. Až máme loop devices, které jsou mnohé zvukovat na testování. Někdy jsou zvukovat v nějaké zvukovaté konfigurace. Vměst se, že máš dokelé velké výstře a výstře. A můžeme tady vyskávání zvážkování a LVM a laks. V té dále jsou třeba velké třeba. LVM a laks jí vyskávání zvážkování. Laks nává vyskávání z výstře a vyskávání vyskávání. And you can do many, many crazy things you couldn't even dream of. So if you have some extra time, definately take a look at device MEPER and LVM. And there are new features which are being added every month. Or definately, between two desktop conferences, you can definately find something new in LVM and device MEPER. So don't forget about that. A po nejvědom složitým věděti jsme 4 firemets, které mám právě file systémy, spolosně mít sva. Je to neměla file systémi, ale je jeho formet, která existuje na věděti. O velikou jsem se poslal v pairing, vcahá v rentaně, protože nez Ergebnis jen jen z ruby. Takže, když se to vzniká, to je velmi zvuk. Vznikáte vznik a tady jsou třeba vznikovat do vývězny, a vznikovat vývězny jsou vznikovat do vývězny. Ale to je nejlepší, protože můžete dělávat vývězny a dělávat vývězny na vývězném, jak něco, který je vývězný, ale na dělávě zvuk. Jekrbýte na vývězny vytvořilo vývězní na dělávě z hřekopovat, než hraní s lidem na d Ranku, který je vývězný na dělávě z hřekopovat i jednou vývězné vývězném na dělávě z hřekopovat na dělávodný, můžete dělávat které mdí, schování které dělávodnýolin a dželé dělávodným které dňou. Můžete mít příkladny system, který opravdu potřeba vyspět návnit. Takže glasco, který vyspět návnit xfs, ale můžete návnit mít tímto xfs, a takže vyspět návnit nejen příkladny system. A vždy návnit to, co jsem vás závnit jistře, že to, které nevávnit závnit glasco, a také něco na něj vyspět. Můžete mít s vůbec, který vypravdu děvět vyspět. Takže je to veliký, většiný, a z鑽vání je to výzvězné. Vyživáte, jaká ideá mi je hodně v tomto pěkně a co to tady můžete přijít? Výzvězné. Takže výzvězné? Výzvězné. Výzvězné. Výzvězné. Výzvězné. Výzvězné. Výzvězné. Výzvězné. Výzvězné. Výzvězné. Výzvězné. Výzvězné. Výzvězné. Výzvězné. Výzvězné. Výzvězné. Výzvězné. Výzvězné. Nezvězné. Je to množně. Jsou to lidem. Jsou to lidem. Jste to lidem. Je to lidem. Jakový heating plant? Úkou roller! Bylo to jedné rá eighteen. řeknoutandro. Řeknoyo automatic. Should have mentioned something like DM rate, which is slowly being replaced with MD rate or and in the other direction, whatever. So this is the simple view of how things go in storage. But as we are in the developer conference, here I come with something that I call a developer's view. And this is how storage works from the developer's point of view. At the very bottom layer there is kernel, and the code that is implemented kernel, which is file systems, then kernel takes care about partition needs. The MD code, DM code is in kernel, butterfs of course. It's not special to be honest, the mic won't be able to say the part of us is special, it has some special features. It's a file system that spans across multiple block devices. That's not something... It's just to create different volumes, but it doesn't create any block devices. I just don't want to give you any information to people that it is something different than a file system, because it's definitely a file system. What I mean in this slide is that, especially in the previous slide, it's kind of quite a lot of code put into kernel, which takes care about things that are usually handled in a separate code, like replication data or anything like that. Butterfs is a topic for multiple talks, you can have one, I think it will be very... And then you have the loop device support in iSCSI and many others. So this is the kernel layer, and then there is the low level user space, which is the tools, libraries and utilities that communicate with this layer. Usually it's via the IOQ calls to kernel, or writing data exactly to some specific places and triggering kernel to read them and process them. So these are all the MKFS tools. It is also the lib-parket library, mdaem, lvm, dmsetout, which is using lib.mapper, which Kaby was talking about at the previous talk. Also multi-path, cryptsetup, and the libcryptsetup, butterfsprobes, lvsetout, iSCSI tools, iSCSI ADM, but they are multiple of them. And lib-iSCSI, I will get to lib-iSCSI later, and you will find out why it is here, and I hope it will be kind of funny and interesting for you. So these are the low level user space tools and libraries, and they give you the biggest control over what you can do outside of doing the kernel calls. Usually you can do everything, the technology supports in low level user space. I don't know about any example where you could do something with, for example, I don't know, device mapper that wasn't exported outside of kernel in a different form than IOQ calls. It's usually old, or as far as I can tell, it's all available in lib.mapper and dmsetout. But if you're writing an application, and for example, that interface, you don't want to do IOQ calls to kernel, but you usually don't want to use these tools and libraries as well, because they are really complex, they provide you with great power, but you have to take care about many things, and if you don't want to guess values, you have to ask user for values that they have no idea what these mean. I don't know, for example, many people know LVM, but if you ask what the extent size for their VG should be, then many people start it. They have no idea what an extent size is, they want to use LVM, but they don't want you to ask them for that value, and even though you don't have to pass it to LVM, it has some default, it's not the case with some other values that you have to pass to this layer. So then there is what I call the APIs layer, which are a little bit higher than the low-level user space, and they provide you with some nicer API that is usually smaller, you lose some functionality, you cannot control everything like you can in this low-level user space layer, but it's usually much easier to use and much nicer to use. And in this layer we have LeBlondat, I will get to that later, it's a library for manipulating blog devices in general. LVM DAPSTAT, which is a Proof of Concept Implementation of LVM Debust API, MultiPath Debust, which is the same for MultiPath, and also TargetD, which is a demon that you can interact with to export, for example, iSCSI devices from a server, and you can then work with them in your client, if I call them with these names. So this is the part, this is the low-level API, which gives you a lot of possibilities, but it's still kind of close to the low-level user space. It's an abstraction to some extent, but it has no extra abstraction that you could like to use in your high-level tools or in libraries and whatever. So then there is StorageD and Blivot, which are, well, many people don't understand the difference between StorageD and Blivot. I will also get to that later, but the basic difference is that StorageD allows you to do things in step-by-step way. So every change you do, you commit it to disk and then go on. Whereas Blivot allows you to change the model, the in-memory model of your storage configuration and then commit it to disk in a single step. So it's kind of a transaction-like model, it's not a transaction at all, you cannot roll back, you cannot do things like you can do with real transactions, for example in databases, but it is an abstraction to the extent that you do things and then commit them in a single step. And then there is the Storage Management, which is a library that allows you to work with various SAN-relative things in a render agnostic way. While the interaction between these two layers happened with idle calls, usually between these layers you have either a C or a Python API or you are calling CLI tools, which is really optimal because forks are, for example, eating random data entropy, which doesn't probably bug you when you are working on your system, but it's kind of a problem in the installation because, or it could be a problem in the installation because there are limited resources of random data entropy and if you do a lot of forks, then they eat your entropy it is gone when you, for example, needed to create, I don't know, SSH keys for your server or encrypting your disks. So we are trying to, so the discussion is about to minimizing the CLI interface between these two layers. And then there is the user interaction layer, which is, for example, the Anaconda installer. I intentionally put parted here because it's a command line 2 that provides, I would say, a high-level approach to creating partitions. And there's also Blivet GUI, which is a graphical user interface on top of Blivet. So you can think about it as G-parted with some extra functionalities. It can work with LVM, it can work with ButterFS, MDRAID and things like that because Blivet supports all of this and it does it in this model change commit way. And there is SSM, the outer of which is sitting right here, which is a nice tool that provides a nice abstraction on top of these bulk device technologies and in a unified way. So, for example, you can do a snapshot of LV and you can do a snapshot of ButterFS volume. But as a user, you don't want to care about if it's LVM or ButterFS. You want to create a snapshot. So you can use SSM and tell it to create me a snapshot slash home and it just creates that snapshot and you don't have to care about the underlying technologies and things like that. And it has many more such features as creating volumes and things like that. And from the web technologies there is cluster management console, Calamari and you probably know Cockpit which is providing web user interface to server management but it includes a lot of functionality related to storage. And then unified storage management or manager, whatever the name is this week, it's basically a unification of cluster management console and Calamari. So something to manage cluster and set together. I think the next two talks are about set cluster and then cluster again. I'll ask these guys. Ok, so we have these layers and it's obvious that for example storage uses LVM to set up LVM SSM uses LVM to do things SSM uses ButterFS so it sounds nice but the reality is not that nice. The reality is this and you may remember the funny picture Who's use with the patent trolls and all those patents which company for patents so this is kind of a similar picture because if you take for example Blivet it is used by Anaconda and Blivet Kui so far so good. It uses LibLogDev it also uses TergD it also uses MKFS it also uses LibPartive and if you go through the transitions for example storageD uses LibLogDev it's really hard to to somehow make big sense from all of this and you can believe me that another like 50 arrows are missing in this image. Did you draw them? Yeah How did it take? It was actually kind of easy there are not so many of them so you can you can probably take the most important fact from that and that is that this is really a mess and so this is the storage land we have right now and as you can imagine in the storage Neverland where we where I hope we will somehow at some point get these there will be a lot less arrows all the arrows will be going in the single direction from bottom to top and there wouldn't be crossing so much so for example if something is implemented in storageD and something from the upper layer wants to use it or wants to do something with ok let me let me phrase it in a different way no arrow or as little number of arrows should go over a layer so for example if SSM wants to do something in LVN that is already implemented in storageD it should simply use storageD it shouldn't bypass it if the API is not ideal for SSM or Blivet or whatever the API should be extended or there should be some extra features in storageD because in this way we are duplicating efforts and we are duplicating a lot of codes and most importantly we are duplicating a lot of bugs because in some cases LVN for example asks you for confirmation because it is a CLI tool and it expects a user to be sitting on the IRM and so we have a code in SSM that makes sure that LVN doesn't ask and if it asks to give it an answer we have the very same code in Blivet we have the very same code in storageD and we are every piece of that code has its own bugs so I just propose that there should be a LVN library I will be at the later that would be great that is the great goal so I think and of course if you think about networking and network state they have maybe not so many technologies maybe less layers in this area but they would have a big round circle here they would say network manager and there would be a single B moment taking care of basically everything that can happen in networking so the question is is something like network manager of storage a good way to go and I see many people shaking their heads I have seen a lot more people shaking their heads in their question it is probably not a good idea because there are many many technologies and it would be kind of a bottleneck and many people have problems with network manager for example it is still not running in the early boot phase in the drake hood because it has a lot of dependencies it is kind of slow for some use cases so we probably don't want to do that but the solution is not that bad the only thing I really hate is this error going in the other direction which is storage d using partit peter is here he is sitting over there so I always thought that storage d uses lib partit but I think if I got it right yesterday when I checked it is using the partit utility so a bug file will be fixed so we need to get rid of many many of these errors and do things in nicer ways but since we are on a demo of our conference I would like to focus on those apis and maybe help you guys or your friends or whoever you can talk to to not add more errors here so let's focus on the apis first of all which is the most recent which are the most recent two things that are currently being developed developed our LVM dubstep which is a LVM dbus api prototype and multi-path dbus which is it is a read only dbus api for multi-path so you cannot do changes to your multi-path configuration but you hardly ever do that anyway so the read only api is kind of enough the LVM dubstep is a replacement for LVM and the replacement uses these double quotes on purpose because LVM is really a fail and it started to exist it provides a very limited functionality and it seems to be a dead end and there are many reasons for that I hoped Kaby to mention that in the previous talk but the biggest issue is that LVM needs to lock itself in memory because if it ended up on a sweat then the code that should activate the sweat back could be on that sweat so it would end up with a useless system so it's a greatly simplified view to the reason for that so it is a replacement in double quotes because it surpasses libLVM to a great extent provides much more functionality in a much better and nicer way it is right now it is implemented in Python but this week I heard a promise from the LVM team that they are going to they are going to rewrite they are going to see at some point and take it under their wings and develop it because right now it's developed by Tony who is not a member of the LVM team so that's why he's requesting that I know yeah sure so right now it's in Python it doesn't matter too much because it's really fast faster than most of the use cases really need so it's not a big problem as I mentioned it is actively developed extended and improved it also provides evens and signals for changes happening in LVM which otherwise are kind of hard to gather from UDF events and things you can monitor and so the goal the ultimate goal is to provide a version control non-forking non-blocking interface to LVM very similar situation the multi-path it said that it was kind of funny that originally there were two versions because two people had the same idea and chose a different approach one of them wanted to add a thread to multi-path D and the other was using clip multi-path and the second approach which seems to be the better one because the multi-path D people are really not fans of adding new threads running in their code and things like that the other two APIs are the label of that which is a C library the first goal was to rewrite blivet's backend that was written in Python to C so that it could be used for projects as well it provides support for butterfes, labs, DM something that I call terminal block devices which is Z-ram and B-cache loop devices LVM, MD, MPAL and SWAP and S390 stories so those densities and it is a stateless and synchronous library so if you want to create an LV in a non-existing Ouija it fails to do so just when it calls LVM and returns the result it has no state it doesn't remember that a Ouija was created or things like that and there is a very tiny library called LitviteSize which is just a combination of GObject and GMP the GNU multi-precision library which I was working with big sizes over the MaxUIN 64 bytes and it provides unified human readable representation of sizes so these two are more for information about the enterprise storage, I'm not sure how much people are interested in them about them so I think I can skip them if you want to ask something about them then reach me later and these are the three main high level APIs to kind of APIs StarchD is a successor of UDISKS2 it is basically the UDISKS2 codebase that was made modular and it adds some enterprise technologies like LVM which is the default storage configuration for Fedora so I'm not sure how much that is enterprise technology but it was for a long time rejected by the UDISKS2 developers and it resulted in creating a fork of UDISKS2 and calling it storageD because now we can add this functionality that we need it provides low level API for both devices as I already mentioned it provides the step by step approach and it provides both passive and active functionality by passive I mean that you can get information about block devices from there by active I mean that you can change you can actually change the block devices and also signals and monitoring I already mentioned something about Blivet it's written in Python it's used by the Anaconda installer it provides a high level API uses lid block depth and storageD as you have seen in the arrows and a very interesting thing about it is that it also apart from the model and commit approach it also provides device factories so you can for example tell it ok scan my storage configuration and now create an MD rate level 10 as big as you can on my system and it takes care about everything else it just goes on then you can check what it created and then you can commit to disk or not I already mentioned SSM which as far as I can tell it has no real API it's a CLI tool it's written in Python you can import the Python module it uses but it has no real nice API which would allow you to do use the unified abstraction functionality but it was not designed to have a real API just because of the abstraction so it was a little minor and it has been mentioned many times in the last few months that maybe the SSM approach is something that would fit into that network manager of storage where we could provide some high level abstraction and functionality to allow as well as users do some high level things not caring about the underlying technologies so these were the APIs and now I have some a few funny stories that happened I would like to share here comes the LVM I already mentioned something of that it was always wanted as long as I know as I have been in Red Hat for 5 years everybody was talking about LVM 5 years ago and it turned out to be a dead end and you know what? I'm kind of happy that it happened because now that everybody agreed it is a dead end there are no more requests to create it in a way that many people always want to exist and with LVM DAPSTEP the LVMD bus prototype nothing is really talking us from creating live LVM that would use the D-BUS interface so it could be a C library with the D-BUS interface behind the bag and you wouldn't have to care about that also another interesting thing was that I'm the author of the live log dev and it's ButterFS plugin and I was requested to use the IOC for calls like the ButterFS progs do in my plugin and I was like okay but then ButterFS progs should use live log dev ButterFS because we only want to have the code doing the IOC tools in a single place so why not make ButterFS progs use and of course the ButterFS people were like oh no no that's not gonna happen and I was like okay so then come up with live ButterFS and we can call that library both which is the way to go live ice-cazy is a very funny thing because actually this is live ice-cazy which is a downstream patch for open ice-cazy sources and it is shipped as part of the ice-cazy initiator utils package we have in Federa but the original upstream tarbol only provides command line utility and we have a patch that creates a library from that command line utility and the code in that command line utility is really not written to be aware of any other code running in the same process space so for example if you call some function from this library it can freeze your process for 12 minutes because that's what the command line utility does and it has no no thanks for that I already mentioned LVM CLI usage we have more than four implementations of parsing out the output of the LVM CLI and as the LVM team I think it was last year they presented something they call the dash-dash select option I internally call it LVM SQL because that's kind of what it allows you to do and it allows you to cherry-pick information the very little piece of information that you actually need and then you don't have to parse it except that we started doing that and we now have an open bug that Blivet is scanning disks for 12 minutes and calling LVM CLI 800 times by doing that we are cherry-picking the information but we are cherry-picking it in 2000 instances so these are kind of set stories the nicer stories are LibBlogDev using LVM debuts now and there are two plugins for LibBlogDev both providing the LVM functionality one is using the CLI one is using debuts the debuts of course provides significant speed up and less forks and is completely transparent to the color of LibBlogDev so if you use LibBlogDev like Blivet does, you don't have to care about if the LVM debuts is available or not, it will just work and use the better option and also one nice story Blivet is using storageD iSCSI now because we used to have a code in Blivet that was doing iSCSI operations and we didn't like it so it was removed but actually moved to storageD and we now have this at least we now have this ugly code in a single place so we are deduplicating code ok, i'm out of time so thank you for attention you can reach me via email or on IRC or here i will be here tomorrow so if you have any more questions and things like that feel free to catch me by the presentation please yes so given that you still think there should be less individual projects developing stuff like this i believe there should be less but wouldn't it be the same argument as having less distributions to just have three major distributions and they'll fix everything because distribution re-implements distribution did but it's kind of pointless to for example have a code that parses output of LVM so it's never going to happen it's never going to reach a point where you have just a couple of projects doing the exact same thing so let me talk to you i'm Alex i'll be introducing you so všetka odšlil je to bovány red ok je se red nejce, sávánta s ozeckázov, byste na používá tento a objevný bás věc jestli teďka dělal dělal ten lidlouby jak je to mrozdil proti vovány si všetký povížet na pozadí to stění pořád vělat. No jasné, ale minimálně to dělá to, že ti to ziceá LV a mění závodní zdechne kvědnou. I to je to, že je to. Ale závodní poslochá na JUDV a tady tu je to a tak dávě. Takhle, takže to... Vžem, bylo to si povědnou, že bylo to se vědnou. Všechno, že to... Všechno, že to... Všechno, že to... Všechno, že to... Všechno, že to... Nech se nám zektovářit. A tak nevedí. Já praciu z informace. Jsi se rád tu korupajtní zdechny o reprezentaci. Jak to zmeří koruně za 10. Myslíš, je to zkusit na zepot Kevin Zile. Kdež jste můžete mít? Můžete mít?